Files
sanctuary-beta/docs/testing.md
T
2026-09-09 00:31:21 +02:00

41 KiB
Raw Blame History

Vérifier Sanctuary

Utiliser Java 25 et les dépendances épinglées dans gradle.properties.

./gradlew check build assemblePack --console=plain

check inclut les tests GameTest. Pour un diagnostic ciblé de la génération seule, utiliser ./gradlew :sanctuary:runGameTest --console=plain.

Pour générer de vrais chunks et vérifier le spawn sur d'autres graines :

./gradlew :sanctuary:runGameTest -PsanctuaryTestSeed=42 --console=plain
./gradlew :sanctuary:runGameTest -PsanctuaryTestSeed=8675309 --console=plain

La propriété ne s'applique qu'au mod de test, jamais au mod distribué ni à une sauvegarde de joueur. Chaque commande repart d'un monde de développement neuf.

Tests de forme

La tâche :sanctuary:worldgenSmoke, incluse dans check, vérifie les invariants de l'enveloppe de l'île : absence de noyau imposé, conservation des trous naturels, sculpture du bord, limite extérieure, hauteur et stabilité de la fonction géométrique. Elle complète les tests en jeu ; elle ne charge pas à elle seule les ressources de génération de Minecraft.

La tâche :sanctuary:hydrologySmoke, également incluse dans check, vérifie le planificateur sur des reliefs contrôlés : reproductibilité, variation de la graine, limites de profondeur et dexcavation, support naturel, parois, ruisseau sur plateau compatible et partition indépendante de lordre des chunks. Les scénarios vides, percés ou trop minces ne reçoivent aucun bassin de secours.

Les tâches :sanctuary:naturalHydrologySmoke et :sanctuary:starterLavaSmoke complètent ces contrôles pour lalpha.5 : dépôts de trois à cinq couches sur support naturel, terrasses peu creusées, niches de source, parcours de cascade et petite réserve de lave avec accès sec. Elles vérifient le déterminisme et labsence de remplissage de secours lorsque la géométrie ne convient pas.

Tests dans le moteur Minecraft

runGameTest démarre le serveur de test headless officiel de Fabric dans mods/sanctuary/build/run/gameTest/. La tâche cleanGameTestWorld supprime uniquement son monde jetable avant chaque exécution afin de générer des chunks neufs. Il ne déploie rien dans un serveur ou une installation de jeu personnels. La configuration garde eula=false : aucun fichier d'acceptation n'est écrit par Loom. Fabric dispose d'un chemin de démarrage propre à ses tests automatisés.

Le source set gametest est un mod de test séparé, exclu du JAR Sanctuary distribué. Deux adaptations y sont nécessaires, vérifiées contre les classes Minecraft 26.3-pre-2 :

  • GameTestServer sélectionne normalement minecraft:flat_all_dimensions. Le mixin de test sélectionne directement le preset de production sanctuary:sanctuary, sans recopier ses JSON.
  • Le framework désactive normalement les structures. Le test les active dans WorldOptions pour examiner les chunks après toutes les étapes de génération. La seed du serveur de test est 0 par défaut ; -PsanctuaryTestSeed est transmis à la propriété JVM sanctuary.test.seed utilisée uniquement dans ce mixin.

Le framework déplace aussi le spawn vers une grille de tests située loin du centre. Le test capture donc le spawn juste avant ce déplacement, après l'initialisation normale du monde, et examine les coordonnées absolues de l'île.

Les scénarios suivants couvrent le socle et les générations historiques ; les contrôles et résultats propres à lalpha.8 figurent plus bas :

  1. Le vrai générateur Sanctuary est chargé et le spawn collectif repose sur une surface déjà présente dans la densité naturelle, avec un sol plein de 3×3 blocs et deux blocs libres et secs pour les graines de régression.
  2. Douze chunks entièrement générés sont vides dans les quatre directions, juste après l'enveloppe de décoration puis à environ 512 et 4 096 blocs. Cela couvre notamment l'ancien retour automatique de l'archipel au loin.
  3. La densité du datapack réellement chargé, compilée par RandomState, est reproductible pour la seed 0 et change pour la seed 8675309.
  4. La densité compilée des graines 0, 42 et 8675309 ne crée aucune matière là où le terrain source est vide. Le relief supérieur reste celui de l'alpha.2 translaté de 64 blocs et le dessous varie avec le terrain et les bruits.
  5. Le nouveau monde et son bruit utilisent bien 384 blocs, à partir de Y=0, tandis que les anciens paramètres restent à 256 blocs. Les nuages sont au-dessus de l'île, à Y=352,33.
  6. Aucun plancher solide napparaît sous l’île, à Y=0..15. Dans les générations alpha.5 à alpha.7, seules les eaux des cascades déclarées peuvent traverser cette marge.
  7. Le relevé après génération compte exactement tous les états des blocs des chunks demandés, avec des totaux cohérents et une complétude explicite. Voir Expansion et ressources pour le mode complet facultatif.
  8. Le plan hydrologique se retrouve dans les vrais chunks après décoration : profils épais de sédiments, bassins retenus, raccords entre chunks, canne à sucre valide, niches rocheuses et descente réelle des cascades. La palette active et les minerais sont inspectés sur le terrain. Une réserve de lave présente conserve ses 18 sources, ses supports et son accès après simulation.
  9. Les anciennes clés gardent leur traitement dorigine. Seuls les nouveaux paramètres activent le traitement ajouté pour leur génération.

La recherche de spawn parcourt l'île finie, par anneaux de quatre blocs jusqu'à 288 blocs du centre. Elle examine d'abord la hauteur brute pour éviter de générer entièrement les colonnes vides, puis vérifie le sol et les dégagements après décoration. Elle préfère une zone naturelle de 3×3 ; si aucune n'est trouvée, elle utilise le premier emplacement naturel sûr d'une colonne avec deux blocs libres. Elle ne pose aucun bloc. Une graine pathologique sans emplacement sûr échantillonné produit une erreur explicite, sans plate-forme de secours.

Le passage avec la graine de serveur 0 produit aussi, pour les trois graines, des PNG et CSV dans mods/sanctuary/build/run/gameTest/diagnostics/ :

  • island-density-seed-<graine>.png : vue de dessus et coupes centrales X/Z, avant/après, calculées avec les fonctions de densité réellement compilées. La colonne « alpha.2 » utilise ses anciennes ressources conservées ; la colonne de droite utilise la densité alpha.3, sur toute la hauteur Y=0..383.
  • island-heightmap-seed-<graine>.csv : coordonnées et hauteurs échantillonnées des deux versions (-1 indique une colonne vide dans cet échantillon).

La vue de dessus échantillonne tous les quatre blocs en X, Y et Z. Les coupes échantillonnent tous les deux blocs horizontalement et chaque bloc en hauteur. Ces diagnostics montrent les volumes ; ils n'affichent pas les arbres, matériaux, fluides ou structures et ne remplacent pas un essai visuel dans le client.

Le chargement du serveur valide également les codecs et les références des registres de biomes, densités, réglages et presets. Un échec de chargement ou un test obligatoire en échec doit faire échouer la tâche Gradle.

Le framework et les hooks de test sont spécifiques à la version épinglée. Lors d'une mise à jour Minecraft, vérifier ces hooks avant de conclure que les tests exercent toujours le preset de production. La vérification explicite du générateur dans le premier test empêche un résultat positif sur un simple monde plat.

Référence du workflow : tests automatiques Fabric. Les signatures propres à 26.3-pre-2 ont été vérifiées dans les dépendances locales, car la documentation publiée vise actuellement 26.2.

Diagnostic hydrologique

Les essais hydrologiques demandent les chunks contenant tous les sites du plan et un halo dun chunk. Ils inspectent des chunks FULL, avec minerais, arbres et plantes déjà générés, et comparent tous les blocs deau observés au volume annoncé. Leur carte montre les vrais blocs de surface ; le feuillage et les troncs sont masqués pour lire les berges. Il ne sagit pas dune capture du jeu.

Pour lalpha.5, les chunks de l’île sont maintenus actifs, puis le test attend ServerLevel.isPositionTickingWithEntitiesLoaded sur chaque chunk de fluide. Ce prédicat, réellement utilisé par le planificateur des ticks en 26.3, exige à la fois le statut de simulation et le chargement des entités. FULL et shouldTickBlocksAt seuls ne prouvent pas que les ticks programmés sexécutent. Un témoin deau temporaire est vérifié dans chaque chunk de source et de lave, puis retiré entièrement. La simulation des sites dure 1 800 ticks après cette activation. La graine 0 doit notamment démontrer une cascade qui atteint Y=0.

Les fichiers natural-hydrology-seed-<graine>-generated.json/.png et natural-hydrology-seed-<graine>-after-1800-ticks.json/.png sont écrits dans mods/sanctuary/build/run/gameTest/diagnostics/, avec des profils PNG des cascades. Ils décrivent les sites, dépôts, fluides, biomes et ressources des chunks inspectés, ainsi que la graine et la version. Ce relevé de ressources reste local à ces chunks et ne représente pas le stock total de l’île.

Le diagnostic alpha.4 est conservé séparément, avec ses fichiers surface-hydrology-…-after-200-ticks et ses eaux entièrement retenues. Le nombre de blocs deau ne mesure pas un débit ; un résultat sans site STREAM ne valide pas une rivière, même sil contient des lacs.

Pour itérer sur leau sans recalculer les trois grandes cartes de densité :

./gradlew :sanctuary:runGameTest -PsanctuaryDensityMaps=false -PsanctuaryResourceSurvey=off --console=plain

Ces options désactivent seulement les exports de densité et le relevé de ressources général (neuf chunks ou île entière). Le diagnostic hydrologique garde ses propres comptes locaux. Les options gardent les assertions de densité et tous les tests de comportement, y compris les cartes et contrôles hydrologiques. Le parcours standard conserve les exports complets de densité pour la graine 0.

Vérification client facultative

./gradlew :sanctuary:runClientGameTest -PsanctuaryClientTests=true --console=plain

Ce test charge les vrais SkyRenderer et FogRenderer et vérifie l'application des deux mixins, puis ferme automatiquement le client sans ouvrir de sauvegarde. Il nécessite un environnement graphique ; check ne le lance pas. Ses sources dans src/clientGametest/java ne sont ajoutées au mod de test que lorsque la propriété est activée. Le test de transformation ne remplace pas l'essai visuel de l'horizon dans un nouveau monde Sanctuary.

Pour cet essai visuel en monde de développement créatif, comparer la même vue à Y=70, 62, 32, 8 puis 8. Il ne doit apparaître ni disque noir au passage de Y=63 ni assombrissement d'altitude au passage de Y=32. Les brouillards de l'eau, de la météo et des effets d'aveuglement ou d'obscurité doivent rester présents.

Contrôles et validation alpha.8 — 9 septembre 2026

Les trois essais utilisent des mondes neufs et le preset de production sanctuary:sanctuary_rift, avec Minecraft 26.3-pre-2, Java 25, Fabric Loader 0.19.5 et Fabric API 0.160.0+26.3. Les journaux propres aux graines 0, 42 et 8675309 terminent leurs tests requis et leur tâche Gradle sans échec. Le build complet check build assemblePack est exécuté sur la graine 42. Il passe en 4m 57s, avec 12 tests purs de comportement et les tests serveur. Les exports généraux facultatifs sont désactivés ; les diagnostics ciblés et les assertions de comportement restent actifs.

Les nouveaux contrôles exigent de vrais bassins terminaux connectés à la rivière et la continuité physique entre chaque tige et son chapeau de gros champignon. Les rapports antérieurs à ces contrôles ne sont pas utilisés.

Graine Chunks FULL Failles / colonnes témoins Chênes / bouleaux supérieurs Chênes noirs inférieurs Gros champignons Petits sous plafond Minerais dehors : charbon / fer / cuivre
0 246 3 / 3 331 / 249 19 22 273 488 / 170 / 124
42 216 2 / 2 361 / 178 17 15 140 379 / 209 / 148
8675309 231 3 / 3 236 / 125 31 17 202 633 / 261 / 262

Les mêmes échantillons montrent la coexistence de chênes noirs et de gros champignons sur les graines 0, 42, 8675309.

Les arbres sont comptés par groupes de pieds de troncs avec sol et feuilles observés. Les gros champignons ont une tige enracinée, un chapeau connecté et une voûte naturelle ; leurs blocs sont de nouveau contrôlés après les fluides. Les petits champignons sous plafond ont également leurs supports naturels. Ils ne sont pas confondus avec le sous-ensemble actual_lower_terrace_vegetation. Les failles sont vérifiées sur des colonnes témoins à lintérieur des traces : ce nombre ne mesure pas la longueur complète des canyons.

Graine Longueur rivière Déplacement Niveau Y Colonnes deau Colonnes des deux bassins Sources liées Descente liée observée
0 409,8 199,7 243 2 863 240 / 241 1 8
42 247,8 171,0 247 1 712 254 / 247 1 6
8675309 340,7 251,3 239 2 247 265 / 244 1 8

La longueur vient de river_routes[].length, somme des déplacements successifs du chemin, diagonales comprises. Le déplacement est la distance entre ses extrémités. Les deux bassins ont des élargissements mesurés au-delà du lit ; chaque raccord local et larrivée réelle de la cascade sont contrôlés. Le tracé est arrondi à l’échelle de 16 à 32 blocs, avec un lit denviron 5 à 7 blocs de large. Les limites sont de 16 blocs retirés pour le lit, 12 pour ses berges progressives et 2 pour les autres rives, sur support naturel.

Graine Eau retenue Eau hors bassins Eau totale Lave totale Sources de lave Coulées déclarées Accès à la poche de lave
0 6 463 363 6 826 144 20 2 (-5, 106, 80)
42 4 899 358 5 257 144 20 2 (-35, 108, 6)
8675309 5 841 345 6 186 144 20 2 (-55, 132, 0)

Ces fluides sont lus après 1 800 ticks dans des chunks actifs, avec témoins indépendants du fonctionnement des ticks. Les volumes retenus correspondent exactement aux volumes attendus. Leau extérieure reste reliée aux sources déclarées ; la lave des coulées est distinguée des sources de la poche couverte. La poche contient 18 sources lorsquelle est présente ; ses coordonnées daccès ne sont pas les niveaux des blocs de lave. Sa recherche privilégie Y=64..160, avec un site plus haut possible si la recherche basse échoue. Les coulées supplémentaires partent de sources entre Y=40 et Y=160. Ce relevé à 1 800 ticks ne signifie pas que tout écoulement a atteint son état final.

Graine Sols de mousse Sols de podzol Sols de mycélium
0 16 268 15 441 6 855
42 7 197 6 684 3 502
8675309 12 519 10 616 5 185

Les sols sont des colonnes inférieures naturelles réellement revêtues de ces matières. Les proportions de placement ne sont pas imposées au relevé.

Les stocks suivants comptent les blocs dans les seuls chunks inspectés, avant les ticks de fluides. Ils incluent les variantes ordinaires et dardoise de chaque minerai. Ils ne représentent pas toute l’île et ne sont jamais complétés pour atteindre un quota.

Minerai Graine 0 Graine 42 Graine 8675309
Charbon 7 291 5 738 4 295
Fer 2 899 2 330 1 860
Cuivre 2 229 1 804 1 416
Or 829 533 425
Redstone 819 534 432
Lapis 237 229 122
Diamant 126 80 71
Émeraude 55 34 30
Matière Graine 0 Graine 42 Graine 8675309
Tuf 562 892 439 519 264 881
Cobblestone 288 921 140 182 73 681
Cobblestone moussue 452 727 381 339 220 767
Boue compactée 192 049 145 758 101 652
Ardoise des abîmes 1 437 063 712 417 807 405
Roche noire 379 527 194 967 248 247
Basalte 549 851 293 938 137 965
Soufre 462 657 313 445 401 190
Cinabre 118 411 74 761 114 313

Ces stocks ne prouvent pas seuls laccessibilité de chaque bloc. Les cartes de surfaces, les positions des minerais exposés et les témoins de corniches complètent le relevé. Les minerais « dehors » ont une vraie face dair ouverte vers le ciel ou une ouverture horizontale naturelle inspectée sur douze blocs. Le tableau présente le charbon, le fer et le cuivre. Les JSON conservent aussi les autres familles effectivement recensées dehors, comme l’émeraude lorsquelle est observée ; le choix des colonnes ne limite pas le périmètre du diagnostic. L’échantillon couvre les eaux et leurs voisins, des cibles écologiques et le site facultatif darbre remarquable ; il est volontairement orienté par ces sites, sans prétendre donner un pourcentage représentatif de l’île.

Graine Réentrée bouche deau Réentrée bouche de lave
0 1 vérifiée(s) 1 vérifiée(s)
42 1 vérifiée(s) 1 vérifiée(s)
8675309 1 vérifiée(s) 1 vérifiée(s)

Après consommation des marqueurs de génération, le rappel du post-traitement conserve les modifications temporaires appliquées aux bouches testées ; les blocs témoins sont ensuite restaurés. Les 113 fichiers historiques suivis conservent leurs SHA-256. Aucun monde personnel nest ouvert par ces tests.

Preuves locales ignorées par Git : build/alpha8-build.log (build complet sur 42), build/alpha8-seed0.log, build/alpha8-seed42.log, build/alpha8-seed8675309.log, les JSON rift-seed-<graine>-after-1800-ticks et -postprocessing-reentry, les cartes de canopée et de corniches et les profils de cascades sous mods/sanctuary/build/run/gameTest/diagnostics/. build/report-alpha8-validation.py extrait leurs champs sans remplacer les données absentes par des résultats supposés. Le hash du JAR vérifié est conservé dans build/alpha8-jar-sha256.txt.

Ces résultats portent sur les graines testées. Ils ne garantissent aucune rivière, essence rare ou quantité de ressources sur toutes les graines. Lappréciation visuelle du paysage et l’équilibrage en partie restent ouverts. La distribution est également vérifiée : deux synchronisations packwiz dans un dossier de développement neuf, puis deux dans la même instance Prism. Le second passage ne change aucun fichier géré ; un seul JAR Sanctuary alpha.8 reste actif. Les SHA-256 des 161 fichiers personnels et réglages suivis sont identiques avant et après. La livraison et le hash du JAR figurent dans Distribution Prism.

Contrôles et validation alpha.7 — 8 septembre 2026

WoodlandDiagnostics reprend les preuves hydrologiques et ajoute les forêts, les champignons sous plafond, les roches exposées et les minerais visibles. Les arbres sont comptés par pieds de troncs sur le sol naturel, avec au moins trois bûches verticales et des feuilles réellement observées. Le chêne noir requiert un pied principal de 2×2 et trois couches de support par pied ; ses branches retombantes ne comptent pas comme de nouveaux arbres. Podzol et mycélium sont des sols explicites : le tag minecraft:dirt de cette version ne les contient pas.

Les essais utilisent des mondes neufs, le vrai preset de production et Minecraft 26.3-pre-2 / Java 25 / Fabric Loader 0.19.5. Les dix tests requis passent sur chacune des trois graines. check build assemblePack passe en 3 min 41 s sur la graine 0, avec les huit tests purs de forme, hydrologie, lave, écologie et nouveaux bois. Les exports de densité et le relevé général facultatifs sont désactivés ; les contrôles de densité restent actifs.

Graine Chunks FULL inspectés Chênes de surface Bouleaux de surface Chênes à rayon ≤128 Chênes noirs inférieurs Minerais exposés dehors : charbon / fer / cuivre
0 167 292 263 218 30 4 / 19 / 5
42 154 313 125 250 13 8 / 3 / 13
8675309 167 336 99 272 36 7 / 6 / 9

Ces nombres décrivent un échantillon borné : les eaux et leur voisinage, des cibles écologiques et lemplacement de larbre remarquable. Ce nest pas un inventaire complet de l’île ni un pourcentage représentatif de toutes ses surfaces. Les sols sont mesurés sous les canopées. Les minerais recensés dans la dernière colonne ont une face dair réelle, ouverte vers le ciel ou vers une paroi dégagée sur douze blocs ; les faces dans de petites cavités sont comptées séparément. Les trois roches présentent des nappes contiguës exposées.

La graine 42 démontre un cerisier remarquable en (-88, 251, -88), avec son tronc, ses feuilles et 21 bûches dans le volume prévu. Le site sélectionné sur la graine 0 ne produit pas darbre rare : lespace et les conditions après décoration restent déterminants. Aucun terrain nest ajouté pour le forcer. Les autres essences rares et le soufre ne sont pas garantis sur chaque graine.

Les eaux sont vérifiées après décoration puis pendant 1 800 ticks réels dans des chunks actifs, avec témoins indépendants du fonctionnement des fluides. Les bassins et les dix-huit sources de chaque niche de lave sont conservés ; les cascades restent reliées à leurs sources et dans lemprise observée. Les pieds des arbres et les champignons observés gardent leur support. Les sédiments sont comparés à leur matériau prévu sur toutes leurs couches ; une roche peut être remplacée seulement par les roches, minerais ou dépôts de terre effectivement configurés. Les berges de sable et gravier sont comptées sur les vrais blocs, y compris par profondeur.

Les anciens générateurs restent isolés : les 77 fichiers historiques suivis gardent leur SHA-256. La réentrée au post-traitement après consommation des marqueurs respecte une modification ultérieure de bouche de source sur les trois graines. Aucun monde de joueur nest ouvert par ces tests.

Preuves locales ignorées par Git : build/alpha7-build.log, build/alpha7-seed42.log, build/alpha7-seed8675309.log, et les fichiers woodland-seed-<seed>-<phase>.json, -canopy.png, -lower-terraces.png et profils de sources dans mods/sanctuary/build/run/gameTest/diagnostics/. Les cartes montrent des lectures de blocs ; lappréciation du paysage dans le client reste à faire lors du prochain essai.

Contrôles alpha.6

layeredHydrologySmoke vérifie les bassins sans ruisseau de secours, les supports des dépôts, leur déterminisme et les sources sur les faces des strates inférieures. Les reliefs vides, trop minces ou percés ne sont pas comblés. layeredEcologySmoke vérifie les sols et le dégagement des corniches, lexclusion du sommet et du vide, ainsi que la variation verticale des biomes.

LayeredHydrologyDiagnostics inspecte les nouveaux paramètres et refuse Dappled Forest dans leur palette. Il vérifie les couleurs communes, les biomes des surfaces hautes et basses, la végétation réelle et les surfaces rocheuses. Les plantes vanilla sur une corniche mince sont relevées séparément : elles ne constituent pas une preuve des trois supports exigés par la nouvelle décoration moussue. Leurs coordonnées et leurs supports sont exportés.

Les tickets de toute lemprise sont posés avant le chargement des chunks FULL. Le test appelle ensuite ServerLevel.waitForEntities(chunk, 0) sur cette même emprise : le serveur GameTest accélère ses ticks et un délai en ticks seul ne prouve pas que les lectures asynchrones dentités sont terminées. Le prédicat isPositionTickingWithEntitiesLoaded et les témoins d’écoulement restent requis.

Le diagnostic simule 1 800 ticks dans les chunks actifs. Les bassins doivent retenir leur eau. Les écoulements extérieurs doivent être reliés à une source rocheuse déclarée par des connexions deau réelles, sans eau orpheline ni voisin horizontal en dehors de lemprise inspectée. Les seuls sites de surface sont des étangs et des lacs ; aucune rivière nest activée dans cette livraison. Les ouvertures des sources sont vérifiées après toute la décoration ; une source bouchée par du lichen ne peut pas satisfaire le contrôle de descente. Après ces mesures, un test de réentrée pose temporairement un lichen à une bouche dont les marqueurs de génération ont été consommés. Un nouvel appel au post-traitement doit le conserver ; le test restaure ensuite le bloc dorigine. La preuve est dans layered-hydrology-seed-<seed>-postprocessing-reentry.json.

Les cartes layered-hydrology-seed-<seed>-<phase>*.png montrent les surfaces, les corniches et les profils de sources. Les JSON associés contiennent les résultats et leur emprise. Ces lectures de blocs ne remplacent pas lexamen du paysage dans le client.

Validation alpha.6 — 8 septembre 2026

Les dix tests serveur passent sur chacune des graines 0, 42 et 8675309, dans des mondes neufs Minecraft 26.3-pre-2 avec Java 25, sur Apple M1 à 8 Go. Chaque emprise est réellement active pendant 1 800 ticks mesurés. La commande finale check build assemblePack, avec les exports de densité et le relevé ressources général facultatifs désactivés, passe en 3 min 30 s sur la graine 0. Les six tests de forme, hydrologie, lave et écologie passent également.

Graine Spawn naturel Eau des bassins Eau des cascades Canne Lave Chunks FULL Plantes sur corniches épaisses
0 (0, 252, 0) 1 533 414 20 18 151 11 021
42 (0, 249, 0) 1 376 913 4 18 149 6 334
8675309 (0, 247, 0) 1 590 2 350 10 18 160 9 532

Ces nombres décrivent uniquement les chunks inspectés, après décoration et simulation. Les plantes incluent la végétation vanilla et la nouvelle décoration, sur des corniches avec trois supports naturels ; les plantes de corniches plus minces sont comptées séparément. Les cinq variantes de biome sont observées sur les surfaces inférieures, avec respectivement cinq, trois et deux changements verticaux contrôlés. Les surfaces inspectées comportent 5 805, 4 765 et 10 045 colonnes de pierre au sommet ; il ne sagit pas dun quota pour l’île entière.

Sur la graine 0, les sources (-112, 103, 0) et (-108, 227, -96) atteignent Y=0 ; celle de (-110, 148, -46) rejoint un palier à Y=130. La première traverse une frontière de chunks. Sur la graine 42, la source (-62, 151, -82) dégage correctement son ouverture autrefois obstruée par du lichen et descend de 49 blocs ; les deux autres descendent de 103 et 236 blocs. Les trois cascades de la graine 8675309 atteignent Y=0. Tous les écoulements observés sont reliés à leur source, sans eau orpheline ni dépassement horizontal de lemprise.

Les bassins conservent leur eau ; les sédiments et leurs supports résistent aux ticks de gravité. Les trois niches de lave gardent leurs 18 sources, leur coque et leur accès sec. Le test de réentrée après consommation des marqueurs réussit sur les trois graines : une modification ultérieure de la bouche reste intacte. Les 52 fichiers historiques de génération suivis pour cette livraison gardent leur SHA-256 davant modification.

Les cartes de surface, de corniches et les profils de cascade ont été examinés. Ce sont des lectures de blocs ; le rendu dans le client reste à apprécier en jeu. La grande rivière traversante nest pas activée : cette livraison adopte les petits bassins et les sources de paroi. Les ressources restent observées après génération, sans garantie de toute la progression Minecraft pour chaque graine.

Validation alpha.5 — 8 septembre 2026

Les essais utilisent Minecraft 26.3-pre-2, Java 25 et le preset de production sur des mondes neufs, sur Apple M1 à 8 Go. Le diagnostic attend les chunks réellement simulables avant de mesurer 1 800 ticks de fluides.

Les dix tests serveur réussissent sur chacune des graines 0, 42 et 8675309. La vérification finale check build assemblePack, avec les cartes de densité et le relevé général facultatifs désactivés, réussit en 3 min 11 s sur la graine 0. Les contrôles ciblés de ressources, de biomes et de fluides restent actifs. Les tâches de forme, dhydrologie et de lave réussissent aussi.

Graine Spawn naturel Eau des bassins Eau des cascades Canne à sucre Lave Chunks FULL inspectés
0 (0, 252, 0) 1 930 1 649 52 18 189
42 (0, 249, 0) 1 859 1 058 25 18 177
8675309 (0, 247, 0) 1 830 3 960 16 18 195

Sur la graine 0, les trois sources partent de (-108, 227, -96), (-26, 203, -141) et (-82, 176, 141) et atteignent toutes Y=0. Les trois sources des graines 42 et 8675309 atteignent également Y=0. Les bassins conservent leur volume ; la niche de lave conserve 18 sources et son accès praticable, sans incendie détecté. Le cours deau reste continu à travers les frontières de chunks.

Les dépôts ont trois à cinq couches et deux supports naturels en dessous. La rive sèche la plus éloignée de leau atteint une distance de Manhattan de 20 blocs sur la graine 0, 28 sur la graine 42 et 27 sur la graine 8675309. Les cartes montrent des plages larges et asymétriques, des bandes de gravier et des interruptions par la roche ou lherbe. Quelques petites poches restent anguleuses à l’échelle du bloc. Les profils montrent les cascades réelles ; ces lectures de blocs ne remplacent pas lappréciation du relief et des couleurs dans le client.

Les cinq biomes sont vérifiés dans des chunks réels. Dans les 189 chunks inspectés de la graine 0, le relevé compte 754 minerais de charbon, 464 de fer, 197 de cuivre, 215 dor, 210 de redstone, 23 de lapis et 14 de diamant. Ce sont des blocs présents, pas des rendements de minage ni un total pour l’île entière. Le bois, la pierre et les ressources renouvelables nont pas de plafond de construction ajouté. La progression complète et l’équilibrage coopératif restent à éprouver en partie.

Le calcul initial du plan hydrologique prend 23 623 ms dans la vérification finale de la graine 0 et 24 475 ms dans lessai de la graine 42 ; la recherche de lave ajoute respectivement 1 075 ms et 1 568 ms. Le plan est mis en cache par état aléatoire de monde, sans charger de chunks voisins. Ces durées sont distinctes du chargement des chunks de diagnostic.

Le premier essai court a révélé un défaut du banc de test : un chunk FULL muni dun ticket pouvait encore attendre ses entités et ne pas exécuter ses ticks de fluide. Le contrôle utilise désormais le prédicat exact du moteur et un témoin indépendant par chunk de source. Un autre essai a rencontré trois blocs de chêne couché vanilla au niveau supérieur dun étang. Le diagnostic conserve cette décoration et distingue le volume deau prévu des sources restantes : seuls des troncs horizontaux de surface jouxtant une source, avec de leau dessous ou le fond peu profond plein, sont acceptés. Leur position et leur état exacts, lappui ou leau sous le bois, les parois et le reste des sources sont vérifiés après simulation. Le contrôle de continuité du cours deau reste strict. Le dernier essai de la graine 8675309 conserve les 1 830 sources prévues sans tronc dans l’étang ; le décor vanilla peut varier avec lordre de génération des chunks, tandis que le plan Sanctuary reste identique.

Deux arbres sur des paliers de la troisième graine dévient aussi les cascades. Le trajet sur densité nue ne prévoit pas ces feuilles. Le diagnostic final compare cette prévision aux blocs réels, puis vérifie les composantes deau par connexions de face : toute composante hors bassin doit rejoindre une source déclarée. Aucune eau ne doit toucher un chunk horizontal non inspecté. Lemprise reste celle prévue initialement avec son halo dun chunk, sans élargissement après observation des écoulements. Sur la graine 8675309, les trois composantes comptent 2 445, 1 152 et 363 blocs deau après simulation ; toutes rejoignent leur source et restent entièrement dans les chunks inspectés. Les anciennes classes et ressources de terrain et dhydrologie sont également comparées octet par octet avec lalpha.4.

Journaux : build/alpha5-build.log, build/alpha5-seed42-final.log et build/alpha5-seed8675309-provenance.log. Les exports JSON/PNG sont dans le dossier diagnostics décrit plus haut. Le dernier contrôle par composantes deau est exécuté sur les graines 8675309 et 0 ; lessai réussi de la graine 42 utilisait encore le contrôle plus restrictif du trajet prévu sur densité nue. Le code de génération est identique entre ces essais.

Validation alpha.4 — 8 septembre 2026

Les tests serveur utilisent le preset de production et des mondes neufs. Sur la graine 0, le scénario exige un véritable site STREAM ; les autres graines vérifient la continuité de chaque cours deau quelles produisent, sans exiger quune graine arbitraire soit artificiellement complétée.

Graine Spawn naturel Eau après 200 ticks Canne à sucre Chunks FULL inspectés Raccords deau aux frontières
0 (0, 251, -4) 1 938 15 94 253
42 (-4, 249, -4) 1 501 24 94 213
8675309 (0, 247, 0) 1 551 12 90 190

Pour la graine 0, le cours deau est à Y=250, de X=48, Z=48 à X=20, Z=20. Son chemin suit 18 points et relie deux petites poches deau. Deux petits lacs et quatre étangs sont également présents, en comptant la poche de départ du cours deau. La graine 42 produit elle aussi un cours deau, à Y=221, de (72, 24) à (60, 40) en X/Z. Ce sont des observations de ces graines, pas un minimum promis pour toutes les îles.

10/10 tests requis réussissent sur chacune des trois graines, avec un cours deau observé sur chacune. Les contrôles comparent chaque bloc deau avant et après une simulation réelle confirmée par un témoin d’écoulement et lactivité de tous les chunks concernés. Les quantités deau restent identiques. Les cartes des vrais blocs ont été inspectées : les lacs sont arrondis et les chenaux restent continus. Le tracé des cours deau comporte encore des segments géométriques ; lappréciation du relief, des berges et de leur aspect dans le client reste à faire par le joueur. Les cartes masquent la canopée et ne remplacent pas une vue en jeu.

Le plan initial prend 12 060 ms pour la graine 0 et 8 743 ms pour 42 et 9 755 ms pour 8675309, sur le poste Apple M1 à 8 Go utilisé pendant ces essais. Il est calculé une seule fois par état aléatoire de monde, sans charger les chunks voisins. La préparation des 94 chunks FULL de chaque diagnostic est distincte du calcul du plan et ne représente pas le travail requis à chaque lancement de partie.

Les trois exécutions serveur réussies ont été suivies de ./gradlew check build assemblePack -x :sanctuary:runGameTest : le serveur déjà validé séparément nest pas relancé à lidentique. Les tests de forme et dhydrologie pure, la compilation et lassemblage du pack réussissent en 2 s. Le JAR ne contient aucune classe de test, et le .mrpack contient exactement ce même JAR, avec les versions Minecraft et Fabric attendues.

Journaux : build/alpha4-hydrology-v2-seed0.log et build/alpha4-validation-seed42.log, build/alpha4-validation-seed8675309.log et build/alpha4-build.log. Les exports correspondants sont dans le dossier diagnostics décrit plus haut. Les cartes de densité, inchangées par lhydrologie, ont été exportées lors des premières exécutions de ce ticket ; les assertions de densité restent actives pendant chaque validation.

Validation alpha.3 — 8 septembre 2026

Sur Java 25 / Minecraft 26.3-pre-2 / Fabric Loader 0.19.5 :

Vérification Résultat
check build assemblePack avec relevé complet, graine 0 8/8 tests requis réussis ; 14 min 49 s, dont le relevé complet
Serveur neuf, graine 42 8/8 réussis ; 1 min 3 s
Serveur neuf, graine 8675309 8/8 réussis ; 1 min 4 s
Test client facultatif Réussi en 23 s ; les deux injections de rendu sont appliquées

La graine 0 place le spawn naturel en (0, 251, -4) ; la graine 42 en (0, 249, 0) et la graine 8675309 en (0, 247, 0). Les tests confirment les 384 blocs du nouveau monde, les nuages relevés, le vide inférieur et extérieur et la conservation des anciens réglages. Les coupes des trois graines ont été inspectées : l'ancienne silhouette est relevée et le dessous devient irrégulier. Une comparaison supplémentaire de 1 039 155 échantillons de l'ancienne géométrie refactorée donne des densités identiques bit à bit à l'alpha.2.

Le relevé complet constate 8 584 514 blocs non vides dans les 1 444 chunks de l'enveloppe définie. Sa préparation prend 13 min 2,659 s, son comptage et sa préparation JSON 135 ms, sur un Apple M1 avec 8 Go de mémoire. Ce poste exécute d'autres applications et a aussi exécuté le test client pendant le relevé : c'est une mesure locale, pas une promesse de performance. Les quantités exactes et les exclusions figurent dans la référence de ressources.

Les journaux sont build/alpha3-validation-seed0.log, build/alpha3-validation-seed42.log, build/alpha3-validation-seed8675309.log et build/alpha3-client-test.log. Le JAR alpha.3 a été inspecté : aucune classe de test n'est distribuée. Le .mrpack contient exactement le JAR vérifié.

Le test client valide le chargement et l'application des mixins. Il n'ouvre aucun monde et ne remplace donc pas l'essai visuel en vol décrit plus haut.

Historique : validation alpha.2 — 8 septembre 2026

Commande ./gradlew check build assemblePack --console=plain réussie en 1 min 10 s sur Java 25, Minecraft 26.3-pre-2, Fabric Loader 0.19.5, Fabric API 0.160.0+26.3 et Loom 1.17.20, pour Sanctuary 0.1.0-alpha.2. Les deux commandes supplémentaires de graines ont ensuite été exécutées séquentiellement, chacune sur un monde de développement neuf.

Graine Spawn naturel initial Tests requis Durée des tests Durée Gradle
0 (-4, 187, -4) 5/5 réussis 51,40 s, diagnostics compris 1 min 10 s, build et pack compris
42 (0, 185, 0) 5/5 réussis 1,843 s 20 s
8675309 (0, 183, 0) 5/5 réussis 1,681 s 17 s

Les cinq tests requis comprennent les quatre tests Sanctuary et le test du framework. Pour chacune des trois graines, le spawn possède naturellement une zone sèche de 3×3 avec deux blocs libres ; les douze chunks extérieurs inspectés au statut FULL sont vides. Aucun repli sur une colonne seule n'a été nécessaire.

  • Les invariants WorldgenSmoke, le chargement des codecs et registres, la reproductibilité des densités et l'absence de matière ajoutée par la sculpture ont été vérifiés.
  • Les trois diagnostics PNG et CSV ont été produits avec la densité actuelle. Leur calcul synchrone explique la durée plus longue du test de graine 0 et son avertissement serveur « Can't keep up » ; ce diagnostic est absent du mod distribué.
  • La compilation du JAR, l'assemblage dans build/packwiz/ et la vérification des versions et empreintes du pack ont réussi.
  • Le JAR mods/sanctuary/build/libs/sanctuary-0.1.0-alpha.2.jar ne contient aucune classe ni configuration de mixin GameTest.

Les journaux de cette validation sont conservés localement dans build/alpha2-validation-seed0.log, build/alpha2-validation-seed42.log et build/alpha2-validation-seed8675309.log. Les journaux courants de Minecraft sont dans mods/sanctuary/build/run/gameTest/logs/ et sont remplacés au prochain test. Ces preuves et les diagnostics restent ignorés par Git. Les vérifications manuelles ci-dessous restent à effectuer ; les tests n'ont ouvert ni modifié aucune sauvegarde de joueur.

La fondation alpha.1 avait été validée le même jour sur la graine 0, avec un spawn (0, 118, 0) reposant sur l'ancien noyau imposé. Ce résultat historique ne décrit plus la génération alpha.2.

Vérifications manuelles restantes

  • Créer un monde avec le preset Sanctuary dans le client et évaluer visuellement la côte, les trous, les surplombs, la végétation et la lecture du vide.
  • Rejoindre à plusieurs joueurs, mourir et réapparaître ; les tests headless ne simulent pas de connexion client ni les offsets de réapparition des joueurs.
  • Modifier le spawn administrateur, arrêter puis recharger le monde et vérifier sa conservation. Le test automatique couvre le premier démarrage, pas un cycle de sauvegarde et de redémarrage complet.
  • Explorer plusieurs seeds dans le client. Les tests compilent trois seeds et chaque invocation génère des chunks complets pour la seed demandée ; leur échantillonnage extérieur ne constitue pas une inspection exhaustive de toutes les coordonnées.
  • Tester les resource packs, shaders et mods communautaires après leur ajout et vérification de compatibilité avec la version exacte du pack.