1276 lines
76 KiB
Markdown
1276 lines
76 KiB
Markdown
# Vérifier Sanctuary
|
||
|
||
Utiliser Java 25 et les dépendances épinglées dans `gradle.properties`.
|
||
|
||
```sh
|
||
./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 :
|
||
|
||
```sh
|
||
./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.
|
||
|
||
## Correctif alpha.13.1 — journal d’expansion sous Windows
|
||
|
||
Le 9 septembre 2026, le contrôle ciblé suivant passe sur macOS et Java 25 :
|
||
|
||
```sh
|
||
./gradlew :sanctuary:expansionJournalSmoke --console=plain
|
||
```
|
||
|
||
Le journal de cette exécution est `build/alpha131-journal-smoke.log` :
|
||
`BUILD SUCCESSFUL`, en 7 secondes. Le test écrit et relit de vrais fichiers
|
||
temporaires ; il n’ouvre aucune sauvegarde Minecraft personnelle.
|
||
|
||
Les contrôles existants de persistance, de corruption, d’historique immuable
|
||
et de compatibilité des racines restent actifs. Trois scénarios couvrent le
|
||
correctif :
|
||
|
||
- La politique Windows, sélectionnée par le séparateur `\`, permet la création
|
||
du journal, une réservation, sa finalisation et leurs rechargements. Le
|
||
callback de synchronisation du dossier, qui lèverait `AccessDeniedException`,
|
||
n’est jamais appelé. Les écritures, remplacements atomiques et relectures du
|
||
fichier ont réellement lieu sur le système de fichiers du Mac.
|
||
- La politique Unix conserve une erreur `AccessDeniedException` injectée après
|
||
le remplacement atomique. La session devient indisponible, garde son ancien
|
||
état en mémoire et refuse toute nouvelle écriture. Le journal sur disque
|
||
contient la réservation ; une nouvelle instance la relit et peut la terminer.
|
||
- Une corruption injectée après le remplacement mais avant la relecture
|
||
empêche la publication du nouveau plan et conserve le fichier endommagé.
|
||
Le rechargement refuse ce journal au lieu de créer un historique vide.
|
||
|
||
**La branche Windows est simulée ; aucun processus Java ou Minecraft Windows
|
||
natif n’a encore été exécuté pour cette validation.**
|
||
|
||
`check build assemblePack` passe sur les sources alpha.13.1, en 1 min 27 s,
|
||
avec les huit GameTests du monde Moyen de graine 0. Les scénarios d’expansion
|
||
passent ensuite dans deux processus Minecraft distincts, sur la graine 42 et
|
||
le diamètre 724 : création (1 min 32 s), puis réouverture et nouvelle expansion
|
||
(26 s). Deux tests requis passent à chaque étape. Commandes de reproduction :
|
||
|
||
```sh
|
||
./gradlew check build assemblePack -PsanctuaryTestSeed=0 -PsanctuaryResourceSurvey=off -PsanctuaryDensityMaps=false --console=plain
|
||
./gradlew :sanctuary:runGameTest -PsanctuaryExpansionTests=true -PsanctuaryOptionalStructureWitness=true -PsanctuaryTestDiameter=724 -PsanctuaryTestSeed=42 -PsanctuaryResourceSurvey=off -PsanctuaryDensityMaps=false --console=plain
|
||
./gradlew :sanctuary:runGameTest -PsanctuaryExpansionTests=true -PsanctuaryExpansionReload=true -PsanctuaryOptionalStructureWitness=true -PsanctuaryTestDiameter=724 -PsanctuaryTestSeed=42 -PsanctuaryResourceSurvey=off -PsanctuaryDensityMaps=false --console=plain
|
||
```
|
||
|
||
Lancer les deux scénarios d’expansion consécutivement ; le second réutilise
|
||
uniquement leur monde de développement. Comme pour l’alpha.13, le témoin de
|
||
camp naturel est facultatif et absent après recherche complète sur cette
|
||
graine ; aucune nouvelle preuve de structure n’est revendiquée.
|
||
Les [résultats alpha.13.1](benchmarks/alpha131-journal.json) conservent les
|
||
hashes des journaux de test, les identifiants des deux processus et les régions.
|
||
La comparaison des JAR confirme que seuls le journal, sa classe de stratégie
|
||
et la version changent ; le switch synthétique ne change que ses numéros de
|
||
lignes. Toutes les autres classes et ressources restent identiques.
|
||
Les résultats des trois tailles et de l’interface ci-dessous restent ceux de
|
||
la livraison alpha.13 ; ils n’ont pas été réexécutés pour ce correctif de stockage.
|
||
|
||
La cause est établie par les sources de
|
||
[WindowsChannelFactory dans OpenJDK 25](https://github.com/openjdk/jdk/blob/jdk-25-ga/src/java.base/windows/classes/sun/nio/fs/WindowsChannelFactory.java#L206-L272) :
|
||
`FileChannel.open` n’ajoute pas le drapeau `FILE_FLAG_BACKUP_SEMANTICS`, exigé
|
||
pour ouvrir un répertoire selon la
|
||
[documentation Microsoft de CreateFile](https://learn.microsoft.com/en-us/windows/win32/api/fileapi/nf-fileapi-createfilew#directories).
|
||
Seule cette synchronisation du dossier est omise sous Windows ; les exceptions
|
||
d’écriture, de remplacement ou de relecture restent bloquantes.
|
||
|
||
Le fichier temporaire est toujours synchronisé par `force(true)`, puis remplacé
|
||
atomiquement et vérifié. Cette séquence ne garantit pas sous Windows la même
|
||
durabilité du renommage en cas de coupure secteur qu’une synchronisation du
|
||
répertoire sous Unix :
|
||
[OpenJDK utilise MoveFileEx sans WRITE_THROUGH](https://github.com/openjdk/jdk/blob/jdk-25-ga/src/java.base/windows/classes/sun/nio/fs/WindowsFileCopy.java#L279-L294),
|
||
et le contrat de
|
||
[FileChannel.force](https://docs.oracle.com/en/java/javase/25/docs/api/java.base/java/nio/channels/FileChannel.html#force(boolean))
|
||
porte sur les modifications du fichier. Aucun changement de format, de graine,
|
||
de générateur ou de réservation enregistrée n’est introduit.
|
||
|
||
## Alpha.13 — génération unifiée
|
||
|
||
`check build assemblePack` passe, y compris le monde Moyen de graine 0 et les
|
||
smokes. Les preuves exportées, journaux, paramètres, mesures et hashes figurent
|
||
dans [le rapport alpha.13](benchmarks/alpha13-worldgen.json).
|
||
|
||
Le test courant charge `sanctuary:sanctuary`, puis règle son vrai générateur
|
||
`sanctuary:island_v13` comme le fait la personnalisation. Les suites historiques
|
||
restent accessibles avec `-PsanctuaryUnifiedTests=false`.
|
||
|
||
Les trois tailles passent les huit tests moteur sur la graine **42**, avec
|
||
1 800 ticks de fluides. Chaque inspection des cavités utilise au plus 27 chunks
|
||
FULL, choisis sur des sols et plafonds naturels ; les contrôles d’hydrologie
|
||
emploient un autre échantillon borné. Ces volumes ne sont pas un inventaire de
|
||
l’île et ne mesurent pas le rendu du client.
|
||
|
||
| Taille | Chunks FULL du diagnostic d’eau | Blocs d’eau retenus après 1 800 ticks | Pilier de spéléothèmes dans l’air naturel |
|
||
| --- | ---: | ---: | ---: |
|
||
| Petit, 512 | 116 | 4 722 | 25 blocs |
|
||
| Moyen, 724 | 80 | 1 196 | 18 blocs |
|
||
| Grand, 1 024 | 136 | 1 434 | 18 blocs |
|
||
|
||
Les trois cavités natives sont réellement décorées dans chacun de ces mondes :
|
||
mousse et lianes récoltables pour le luxuriant, pointes et piliers pour les
|
||
spéléothèmes, roche soufrée et pointes pour le soufre. Musiques, brouillard et
|
||
table du `sulfur_cube` restent ceux des biomes Minecraft. La graine 0 présente
|
||
seulement du luxuriant dans le raster naturel inspecté ; elle ne justifie pas
|
||
de forcer les deux autres biomes dans la roche. Une livraison exige les preuves
|
||
cumulées des trois types, pas leur présence sur toute graine.
|
||
|
||
Le garde-fou est exercé par une vraie écriture `WorldGenRegion` : eau, lit,
|
||
parois naturelles, sources et sorties sont protégés. Quatre témoins de berge
|
||
appartiennent à un chunk voisin de leur cellule d’eau. Une écriture hors volume
|
||
reste possible. Le test utilise une vue modifiable de chunk dédiée, car les
|
||
holders FULL exposent normalement une vue de génération en lecture seule.
|
||
Les blocs témoins temporaires sont restaurés dans le monde de développement.
|
||
|
||
L’essai client ouvre le bouton natif **Personnaliser**, parcourt les trois
|
||
tailles et vérifie Terminé, Annuler, Échap, réouverture et rafraîchissement des
|
||
réglages. L’écriture/relecture réelle des paramètres conserve la taille, la
|
||
graine, les options, le Nether et l’End. Les anciens générateurs ne deviennent
|
||
pas personnalisables par erreur ; l’éditeur Superflat vanilla reste disponible.
|
||
Une capture confirme la lisibilité de l’écran. Cet essai ne constitue pas une
|
||
visite graphique de l’île.
|
||
|
||
```sh
|
||
./gradlew :sanctuary:runGameTest -PsanctuaryTestDiameter=512 -PsanctuaryTestSeed=42 -PsanctuaryResourceSurvey=off -PsanctuaryDensityMaps=false
|
||
./gradlew :sanctuary:runGameTest -PsanctuaryTestDiameter=724 -PsanctuaryTestSeed=42 -PsanctuaryResourceSurvey=off -PsanctuaryDensityMaps=false
|
||
./gradlew :sanctuary:runGameTest -PsanctuaryTestDiameter=1024 -PsanctuaryTestSeed=42 -PsanctuaryResourceSurvey=off -PsanctuaryDensityMaps=false
|
||
./gradlew :sanctuary:runClientGameTest -PsanctuaryClientTests=true
|
||
```
|
||
|
||
Les diagnostics détaillés restent dans le dossier ignoré
|
||
`mods/sanctuary/build/run/gameTest/diagnostics/unified-<diamètre>-seed-<graine>-*.json`.
|
||
Les anciennes mesures alpha.11 ci-dessous ne sont pas des mesures alpha.13.
|
||
|
||
### Mesure alpha.13 de Moyen
|
||
|
||
Sur le Mac M1 à 8 Go, Java 25.0.3 et heap de 2 Gio, graine 0, un seul processus
|
||
de jeu actif : la création initiale prend **17,65 s**, puis 289 chunks FULL autour
|
||
du spawn **46,01 s**, soit **63,66 s** cumulées. Le couloir suivant de 80 chunks
|
||
FULL prend **7,82 s**. Le maximum observé pour une requête de chunk est de 1,30 s
|
||
autour du spawn et de 0,79 s dans ce couloir.
|
||
|
||
Le protocole conserve les anneaux 17 × 17 et le couloir est de l’alpha.11.
|
||
L’ancien Grand et le nouveau Moyen ont le même diamètre nominal de 724 blocs,
|
||
mais la décoration et le spawn peuvent différer : ce n’est pas une mesure
|
||
d’équivalence de génération. Le résultat de départ reste proche des 62,67 s
|
||
mesurées pour l’alpha.11. Un seul passage par version, sans mesure du GPU,
|
||
des FPS, du réseau, de la disponibilité des chunks pour les ticks ou d’une
|
||
charge multijoueur. Grand n’a pas de benchmark complet 289 + 80 dans cette
|
||
livraison ; ses tests moteur ci-dessus ont une autre charge de travail.
|
||
|
||
```sh
|
||
./gradlew :sanctuary:runGameTest -PsanctuaryBenchmark=true -PsanctuaryTestDiameter=724 -PsanctuaryTestSeed=0 -PsanctuaryResourceSurvey=off -PsanctuaryDensityMaps=false
|
||
```
|
||
|
||
Rapport local : `diagnostics/generation-performance-unified-724-seed-0.json`,
|
||
log `build/alpha13-benchmark-medium.log`.
|
||
|
||
### Expansions et rechargement alpha.13
|
||
|
||
Sur le monde unifié Moyen de graine 42, les deux processus réussissent :
|
||
refus des huit premiers sites occupés, tropicale plus loin au nord, branche
|
||
aride à au moins 2 048 blocs de son parent, relecture du journal et des blocs
|
||
témoins, puis nouvelle expansion après redémarrage. Les colonnes de terrain
|
||
et les biomes enregistrés restent identiques après décodage du générateur.
|
||
Le framework reconstruit les paramètres actifs depuis le preset ; le test
|
||
vérifie séparément le codec sauvegardé et les fichiers réellement rechargés.
|
||
|
||
Aucun camp admissible n’a été observé sur l’origine unifiée des graines 42 et
|
||
8 675 309 : les fondations naturelles ou la protection hydrologique écartent
|
||
les candidats. Les essais stricts y échouent donc sur la preuve de structure.
|
||
La paire unifiée validée utilise explicitement un témoin de structure
|
||
facultatif, seulement après inspection complète des candidats. Ses rapports
|
||
indiquent `native_structure_observed=false` et ne constituent aucune preuve
|
||
positive de placement ou de butin dans l’origine alpha.13. Les critères de
|
||
fondation et la génération ne sont pas assouplis pour faire passer un test.
|
||
|
||
Exécuter les deux commandes sans lancer un autre GameTest entre elles :
|
||
|
||
```sh
|
||
./gradlew :sanctuary:runGameTest -PsanctuaryExpansionTests=true -PsanctuaryOptionalStructureWitness=true -PsanctuaryTestDiameter=724 -PsanctuaryTestSeed=42 -PsanctuaryResourceSurvey=off -PsanctuaryDensityMaps=false
|
||
./gradlew :sanctuary:runGameTest -PsanctuaryExpansionTests=true -PsanctuaryExpansionReload=true -PsanctuaryOptionalStructureWitness=true -PsanctuaryTestDiameter=724 -PsanctuaryTestSeed=42 -PsanctuaryResourceSurvey=off -PsanctuaryDensityMaps=false
|
||
```
|
||
|
||
Sans ce drapeau explicite, le scénario exige toujours une vraie structure avec
|
||
son conteneur et sa table de butin native. La réouverture vérifie toujours ces
|
||
trois éléments lorsqu’ils ont été observés dans le premier processus.
|
||
|
||
La paire historique, rejouée avec le binaire alpha.13, réussit sur la graine
|
||
42 sans rendre le témoin facultatif : camp abandonné de forêt, bloc du
|
||
conteneur et table de butin native retrouvés après redémarrage. Cela valide
|
||
la chaîne génération 12 conservée ; ce résultat ne vaut pas comme preuve
|
||
d’un camp dans l’origine unifiée. Le smoke du journal teste aussi une origine
|
||
13 de diamètre 1 024 avec un enfant 12, le schéma 1 et le refus d’une lecture
|
||
avec une autre génération ou taille, sans modifier les octets enregistrés.
|
||
|
||
## Correctif alpha.12.1 — tous les premiers emplacements occupés
|
||
|
||
Le scénario laboratoire utilise les mêmes commandes Gradle ci-dessous. Il
|
||
prépare maintenant un vrai chunk FULL vide sur chacun des huit premiers sites,
|
||
constate leur occupation puis ouvre une tropicale plus au nord. Une branche
|
||
aride demande ensuite une distance explicite de 2 048 blocs depuis cette île.
|
||
Les anciens chunks vides et le bloc témoin restent inchangés.
|
||
|
||
Le second processus vérifie d’abord les huit refus sur disque avec les chunks
|
||
témoins non chargés, puis ouvre une autre île plus loin au sud et attend du
|
||
terrain prêt. Les preuves se trouvent dans
|
||
`diagnostics/expansion-alpha12-1-seed-42.json` et
|
||
`diagnostics/expansion-alpha12-1-reload-seed-42.json` sous le dossier GameTest.
|
||
Le rapport exporté est [alpha.12.1](benchmarks/alpha121-expansion.json).
|
||
|
||
`expansionPlacementSmoke`, inclus dans `check`, vérifie les huit directions,
|
||
les quatre tailles, les distances minimales diagonales/cardinales, les bornes,
|
||
les réservations existantes et l’immutabilité. Les tests de commandes contrôlent
|
||
les anciennes syntaxes, les retours `preview` à 2 048 blocs et les distances
|
||
hors limites. Le correctif ne change ni le codec, ni la génération 12, ni le journal v1.
|
||
|
||
## Laboratoire alpha.12 — validation locale
|
||
|
||
`check build assemblePack` passe sur Java 25 / Minecraft 26.3-pre-2, avec
|
||
les douze tests moteur Grand de graine 0 et 1 800 ticks de fluides. Les smokes
|
||
`expansionJournalSmoke` et `expansionReliefSmoke` sont inclus dans `check`.
|
||
Le premier contrôle atomicité, corruption, immutabilité, relecture et réservation
|
||
interrompue ; le second couvre cinq graines, quatre diamètres et quatre reliefs.
|
||
|
||
Le laboratoire possède un scénario moteur distinct, à lancer puis à rouvrir
|
||
**dans cet ordre**, sans autre GameTest entre les deux :
|
||
|
||
```sh
|
||
./gradlew :sanctuary:runGameTest -PsanctuaryUnifiedTests=false -PsanctuaryExpansionTests=true -PsanctuaryTestSeed=42 -PsanctuaryResourceSurvey=off -PsanctuaryDensityMaps=false
|
||
./gradlew :sanctuary:runGameTest -PsanctuaryUnifiedTests=false -PsanctuaryExpansionTests=true -PsanctuaryExpansionReload=true -PsanctuaryTestSeed=42 -PsanctuaryResourceSurvey=off -PsanctuaryDensityMaps=false
|
||
```
|
||
|
||
Le premier passage crée le monde jetable. Le second saute volontairement
|
||
`cleanGameTestWorld` et ouvre cette même sauvegarde dans un nouveau processus
|
||
Java. Il échoue si les preuves du premier passage manquent ; il ne les fabrique
|
||
pas après rechargement. La propriété reload est réservée à cette paire de tests.
|
||
|
||
Les deux passages réussissent sur la graine 42. Le premier ouvre une tropicale
|
||
au nord puis une branche aride, vérifie les vrais chunks FULL, les biomes,
|
||
les commandes opérateur, les refus de doublons incohérents et du vide déjà
|
||
chargé, et la conservation d’un bloc témoin. Il observe un camp Vanilla placé
|
||
avec un tonneau et sa table de butin native. Le second retrouve le journal,
|
||
un bloc d’or écrit avant l’arrêt, les colonnes de blocs/biomes/densités et le
|
||
tonneau. Il décode également le codec sauvegardé, mais le framework reconstruit
|
||
les réglages actifs depuis le preset : aucun parcours client normal ou joueur
|
||
connecté n’est simulé. Le crash forcé au milieu d’une préparation reste à essayer.
|
||
|
||
La graine 0 a fourni les deux expansions mais aucune structure acceptable :
|
||
neuf sites étaient vides et deux avaient une fondation trop mince. Le scénario
|
||
exigeant une preuve positive de butin y échoue ; cela ne justifie aucun ajout
|
||
forcé de terrain ni relâchement des fondations. Les validations visuelles des
|
||
villages, temples, reliefs et grandes tailles restent ouvertes.
|
||
|
||
Les preuves exportées figurent dans [le rapport alpha.12](benchmarks/alpha12-expansion.json).
|
||
Les diagnostics complets de chaque exécution restent dans
|
||
`mods/sanctuary/build/run/gameTest/diagnostics/expansion-alpha12[-reload]-seed-42.json`.
|
||
Les commandes et le contrat serveur sont dans [Laboratoire](alpha12-laboratory.md).
|
||
Aucun monde personnel n’a servi aux essais.
|
||
|
||
## 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 d’excavation, support naturel, parois, ruisseau
|
||
sur plateau compatible et partition indépendante de l’ordre 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 l’alpha.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
|
||
l’absence 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, sauf
|
||
lors du second passage explicite `sanctuaryExpansionReload` décrit ci-dessus.
|
||
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. L’alpha.11 utilise le défaut
|
||
Grand (`-PsanctuaryTestPlayers=10`) et Petit (`5`). Les profils historiques
|
||
restent accessibles aux diagnostics de compatibilité, séparément de la liste
|
||
publique de création.
|
||
- 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 validés pour l’alpha.10 et les résultats historiques
|
||
des générations précédentes 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 n’apparaî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](expansion.md) 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 d’origine. 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’à la limite de terrain du profil choisi. Les anciens réglages conservent
|
||
leur borne de 288 blocs. 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](https://docs.fabricmc.net/develop/automatic-testing).
|
||
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 d’un chunk. Ils inspectent des chunks `FULL`, avec minerais, arbres
|
||
et plantes déjà générés, et comparent tous les blocs d’eau 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 s’agit pas d’une capture du jeu.
|
||
|
||
Pour l’alpha.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 s’exécutent.
|
||
Un témoin d’eau 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 d’eau ne mesure pas un débit ; un résultat sans site
|
||
`STREAM` ne valide pas une rivière, même s’il contient des lacs.
|
||
|
||
Pour itérer sur l’eau sans recalculer les trois grandes cartes de densité :
|
||
|
||
```sh
|
||
./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
|
||
|
||
```sh
|
||
./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.
|
||
|
||
## Petit, Grand et optimisation alpha.11 — 9 septembre 2026
|
||
|
||
`check build assemblePack` réussit sur les sources finales avec Grand, puis
|
||
la suite moteur réussit également sur Petit. Douze tests requis passent dans
|
||
chaque monde neuf, graine `0`. Les mondes personnels restent fermés.
|
||
|
||
| Choix | Chunks FULL inspectés | Eau retenue | Ticks de fluides |
|
||
| --- | --- | --- | --- |
|
||
| Petit (`population_5`) | 110 | 5 656 | 1 800 |
|
||
| Grand (`population_10`, défaut) | 125 | 5 923 | 1 800 |
|
||
|
||
Les deux essais vérifient les sources, déversoirs, coulées de lave et témoins
|
||
de réentrée après post-traitement. La persistance réelle sur disque préserve
|
||
les quatre références 5/10/20/100, le défaut Grand, les deux seuls choix publics
|
||
et l’ancien défaut 20 lorsque le champ `players` est absent d’une densité sauvée.
|
||
|
||
L’oracle alpha.10 effectue **3 183 804 comparaisons bit à bit** de densités
|
||
compilées réelles : références 5/10/20/100, graines `0`, `42`, `8675309`,
|
||
volumes, coordonnées signées, frontières et accès concurrents. Pour 10,
|
||
l’oracle utilise l’ancien algorithme paramétré à cette nouvelle taille ;
|
||
aucun ancien preset 10 n’est supposé. Les tests synthétiques ajoutent
|
||
122 528 comparaisons sur les arrondis, collisions et changements de contexte.
|
||
Les expressions de datapacks non reconnues gardent le sampler vanilla.
|
||
Un test de concurrence vérifie qu’un plan prêt reste lisible pendant un
|
||
calcul lent, sans publier de plan incomplet ni conserver un échec en cache.
|
||
|
||
### Mesure à géométrie identique et nouveau Grand
|
||
|
||
Machine : Apple M1, 8 Gio de RAM, Java 25.0.3, heap 2 Gio, huit processeurs
|
||
visibles, Minecraft 26.3-pre-2 / Fabric 0.19.5. **Une exécution par configuration**,
|
||
graine `0`, nouveau monde à chaque fois, spawn `(0,252,0)`. La référence
|
||
alpha.10 est le commit `a26b72f` avec uniquement le harnais de mesure ajouté :
|
||
aucun fichier de production modifié. Aucun autre serveur ou build simultané.
|
||
|
||
| Phase serveur | Alpha.10, ancien 20 | Alpha.11, ancien 20 | Alpha.11, Grand 10 |
|
||
| --- | --- | --- | --- |
|
||
| Création du monde et spawn | 96,766 s | 18,888 s | 18,376 s |
|
||
| 289 chunks autour du spawn | 310,664 s | 43,647 s | 44,291 s |
|
||
| Somme création + zone | 407,430 s | 62,535 s | 62,667 s |
|
||
| 80 chunks d’exploration | 103,142 s | 14,051 s | 7,685 s |
|
||
|
||
À géométrie 20 identique, la somme initiale baisse de **84,65 %** et
|
||
l’exploration de **86,38 %**. Le gain minimal de 30 % est dépassé sur ce
|
||
protocole. Grand respecte le proxy de 120 secondes pour créer le monde et
|
||
produire la zone demandée. Sa surface différente ne compte pas comme preuve
|
||
du gain algorithmique. La latence maximale d’un chunk d’exploration sur
|
||
l’ancien 20 passe de 25,13 à 5,15 secondes : une région froide conserve donc
|
||
un coût ponctuel. Le cache ne rend pas toute exploration instantanée.
|
||
|
||
Le benchmark demande 289 chunks `FULL` par anneaux jusqu’au rayon huit,
|
||
puis 80 dans un corridor vers l’est. Il distingue la création relevée dans
|
||
`Time elapsed` des phases mesurées dans le test. **FULL ne garantit pas le
|
||
statut de simulation ni la fin du post-traitement.** Le libellé du rapport
|
||
brut alpha.10 affirmait par erreur inclure ce dernier ; seul ce texte a été
|
||
corrigé dans le harnais alpha.11, sans changer les demandes de chunks.
|
||
Ni rendu client, ni réseau, ni FPS, ni délai d’entrée visuellement confirmé,
|
||
ni capacité multijoueur ne sont mesurés. Une graine et une répétition ne
|
||
mesurent pas la variance sur toutes les îles ou machines.
|
||
|
||
Les [résultats structurés et hashes](benchmarks/alpha11-generation.json)
|
||
conservent les phases, anneaux, latences, périmètres et preuves moteur.
|
||
Les journaux bruts locaux sont `build/alpha11-baseline-20.log`,
|
||
`build/alpha11-optimized-20.log`, `build/alpha11-grand-10.log`,
|
||
`build/alpha11-check-build.log` et `build/alpha11-small-5.log`.
|
||
|
||
Reproduire le benchmark sur cette version (utiliser `10` pour Grand) :
|
||
|
||
```sh
|
||
./gradlew :sanctuary:runGameTest -PsanctuaryBenchmark=true -PsanctuaryTestPlayers=20 -PsanctuaryTestSeed=0 -PsanctuaryResourceSurvey=off -PsanctuaryDensityMaps=false --console=plain
|
||
```
|
||
|
||
L’option sélectionne le harnais de performance à la place de la suite moteur,
|
||
jamais dans le JAR livré. Le build obligatoire reste une exécution normale :
|
||
|
||
```sh
|
||
./gradlew check build assemblePack -PsanctuaryTestPlayers=10 -PsanctuaryTestSeed=0 -PsanctuaryResourceSurvey=off -PsanctuaryDensityMaps=false --console=plain
|
||
./gradlew :sanctuary:runGameTest -PsanctuaryTestPlayers=5 -PsanctuaryTestSeed=0 -PsanctuaryResourceSurvey=off -PsanctuaryDensityMaps=false --console=plain
|
||
```
|
||
|
||
Les tableaux alpha.10 suivants restent historiques.
|
||
|
||
## Contrôles et validation alpha.10 — 9 septembre 2026
|
||
|
||
Les profils `sanctuary:population_5`, `population_20` et `population_100`
|
||
passent chacun les onze tests requis sur la graine `0`, avec **1 800 ticks de
|
||
fluides de production**. Aucun réveil manuel des sources naturelles n’est
|
||
ajouté par le diagnostic. `check build assemblePack` passe sur le profil 5 ;
|
||
les profils 20 puis 100 sont ensuite exécutés dans des mondes de test neufs.
|
||
|
||
| Capacité | Diamètre nominal | Régions inspectées | Chunks FULL | Régions en cache au spawn → après inspection | Durée de la commande |
|
||
| --- | --- | --- | --- | --- | --- |
|
||
| 5 | 512 | (0, 0) | 110 | 1 → 1 | 3m 46s |
|
||
| 20 | 1 024 | (0, 0), (1, 0) | 185 | 1 → 2 | 6m 31s |
|
||
| 100 | environ 2 290 | (0, 0), (1, 1), (2, 0) | 290 | 1 → 4 | 11m 37s |
|
||
|
||
La durée du profil 5 inclut les tâches de construction ; celles des profils
|
||
20/100 concernent `runGameTest`. Ces temps ne mesurent ni un tick en régime
|
||
établi ni une charge multijoueur. Le calcul du premier plan central reste
|
||
coûteux sur cette configuration : 5 joueurs : 87.710 s; 20 joueurs : 82.834 s; 100 joueurs : 85.761 s.
|
||
La génération en masse reste à optimiser. Le cache commence localement et
|
||
ne construit pas d’emblée toutes les régions de l’île.
|
||
|
||
| Capacité | Colonnes de sédiments sélectionnées | Blocs d’eau retenus | Sources de lave retenues | Sources d’eau / débordements / coulées de lave testés | Témoins de réentrée sans marqueur |
|
||
| --- | --- | --- | --- | --- | --- |
|
||
| 5 | 3196 | 5656 | 19 | 1 / 1 / 1 | 3 |
|
||
| 20 | 3367 | 6319 | 20 | 2 / 3 / 2 | 3 |
|
||
| 100 | 4325 | 8106 | 57 | 3 / 4 / 3 | 3 |
|
||
|
||
Les témoins vérifient les fonds et sédiments après décoration, la conservation
|
||
des sources, les composantes d’écoulement réellement descendantes et les
|
||
supports de lave naturels. Les débordements sélectionnés rejoignent leur bassin
|
||
cible ou leur chute terminale. Le rappel du post-traitement sans marqueur
|
||
préserve une modification ultérieure de l’exutoire. Les nombres décrivent
|
||
uniquement les éléments sélectionnés dans les chunks indiqués.
|
||
|
||
| Capacité | Pas horizontal du relevé de densité | Colonnes avec roche | Colonnes vides | Colonnes avec roche au-delà de l’ancienne emprise |
|
||
| --- | --- | --- | --- | --- |
|
||
| 5 | 9 | 1015 | 3210 | 0 |
|
||
| 20 | 17 | 1753 | 2472 | 790 |
|
||
| 100 | 37 | 2375 | 1850 | 2170 |
|
||
|
||
Ces échantillons de densité attestent des masses naturelles, du vide et de
|
||
l’extension réelle des grandes tailles. Ils ne mesurent pas toute l’aire
|
||
habitable. Les comptes de blocs, troncs et minerais des régions inspectées
|
||
sont des constats locaux avant l’intervalle fluide ; ils ne doivent être
|
||
extrapolés ni en stocks de l’île entière ni en ressources par joueur.
|
||
|
||
Le test de persistance utilise l’écriture et la lecture officielles de
|
||
Minecraft 26.3-pre-2 dans des dossiers temporaires. Il vérifie les trois clés
|
||
de paramètres enregistrées, la graine, **Sanctuary = 20 par défaut**, et un
|
||
témoin alpha.9 qui conserve `sanctuary:sanctuary_cavern`. Le smoke pur régional
|
||
vérifie le rejet atomique des bassins et groupes, les dépendances de sources,
|
||
les limites, les traductions signées et les index de cellules multihauteurs.
|
||
Le gel porte sur 267 fichiers de production ; 212 anciens fichiers restent
|
||
strictement identiques, huit fichiers de liaison/interface sont modifiés.
|
||
|
||
Preuves locales ignorées :
|
||
|
||
- `build/alpha10-check-build-final.log`, puis `build/alpha10-players20-seed0.log`
|
||
et `build/alpha10-players100-seed0.log`.
|
||
- `mods/sanctuary/build/run/gameTest/diagnostics/population-<capacité>-seed-0-engine.json`
|
||
et `population-<capacité>-seed-0-density.json` avec leurs CSV.
|
||
- `mods/sanctuary/build/run/gameTest/diagnostics/population-persistence-seed-0/round-trip.json`.
|
||
|
||
Le JAR, le MRpack et le ZIP d’amorçage sont vérifiés localement. La publication
|
||
et les synchronisations de la même instance Prism sont suivies séparément dans
|
||
[Distribution](packwiz.md). Aucun test de cent joueurs simultanés ni garantie
|
||
de performances n’est annoncé. Les preuves alpha.9 suivantes restent historiques.
|
||
|
||
## Contrôles et validation alpha.9 — 9 septembre 2026
|
||
|
||
Les mondes neufs des graines `0`, `42` et `8675309` utilisent les paramètres
|
||
de production `sanctuary:sanctuary_cavern`. Chaque journal termine au moins
|
||
dix tests requis et sa tâche Gradle sans échec, avec 1 800 ticks de fluides.
|
||
Les sources naturelles d’eau et de lave, les débordements et les geysers
|
||
démarrent uniquement avec leurs ticks de production. Le test programme
|
||
seulement un témoin artificiel indépendant pour vérifier que les ticks
|
||
fonctionnent ; il ne réveille pas les sources naturelles.
|
||
Le build complet `check build assemblePack` réussit en 6m 24s,
|
||
avec 15 tâches de tests purs de comportement.
|
||
Les rapports sont postérieurs au gel du code final ; les résultats de
|
||
l’alpha.8 et les essais alpha.9 intermédiaires ne servent pas de preuve ici.
|
||
|
||
La présence d’un groupe de terrasses connecté, d’un geyser réellement actif,
|
||
de baies lumineuses, de spéléothèmes et d’améthyste bourgeonnante est vérifiée
|
||
sur l’ensemble des trois graines. Chaque élément n’est pas imposé à chaque
|
||
graine ; leurs absences locales restent visibles dans les tableaux.
|
||
|
||
| Graine | Chunks FULL | Failles / témoins | Chênes / bouleaux supérieurs | Chênes noirs inférieurs | Gros champignons | Petits sous plafond | Minerais dehors : charbon / fer / cuivre |
|
||
| --- | --- | --- | --- | --- | --- | --- | --- |
|
||
| `0` | 251 | 3 / 3 | 321 / 251 | 18 | 14 | 211 | 506 / 178 / 147 |
|
||
| `42` | 246 | 2 / 2 | 362 / 177 | 11 | 8 | 69 | 617 / 269 / 193 |
|
||
| `8675309` | 242 | 3 / 3 | 248 / 125 | 14 | 11 | 131 | 761 / 317 / 328 |
|
||
|
||
Les arbres sont des groupes de pieds de troncs sur sol naturel, avec feuilles
|
||
observées ; les gros champignons ont une tige et un chapeau connectés.
|
||
|
||
| Graine | Blocs à baies lumineuses | Blocs émissifs | Spéléothèmes pointus | Améthyste bourgeonnante | Blocs d’améthyste | Geysers dormants + éruptifs | Sources d’eau de geyser |
|
||
| --- | --- | --- | --- | --- | --- | --- | --- |
|
||
| `0` | 363 | 391 | 501 | 214 | 818 | 1 | 1 |
|
||
| `42` | 280 | 308 | 592 | 210 | 945 | 4 | 4 |
|
||
| `8675309` | 446 | 476 | 380 | 141 | 504 | 5 | 5 |
|
||
|
||
Le décor souterrain est compté sur les blocs initiaux réellement générés.
|
||
Ses témoins sont revérifiés après les fluides : support, conservation de
|
||
l’améthyste bourgeonnante et lumière du moteur pour les blocs émissifs.
|
||
Ces nombres comptent des blocs, pas des cavités ni des géodes distinctes.
|
||
L’améthyste bourgeonnante est reliée à une cavité naturelle par un parcours
|
||
d’air vérifié avant et après les ticks ; les JSON donnent la position de
|
||
chaque raccord et les exemples de blocs souterrains, limités à 64 témoins.
|
||
Les geysers observés possèdent la vraie entité de bloc `potent_sulfur`,
|
||
du magma dessous et une source d’eau retenue au-dessus. Un même geyser
|
||
doit passer par les états dormant et éruptif pendant les ticks, sans
|
||
activation artificielle par le test.
|
||
|
||
| Graine | Niveaux Y des bassins | Colonnes d’eau par bassin | Descente depuis la bouche | Nouveaux blocs écoulés accessibles | Deux paliers connectés |
|
||
| --- | --- | --- | --- | --- | --- |
|
||
| `0` | 148 / 140 | 53 / 76 | 148 | 1 230 | Oui, après ticks |
|
||
| `0` | 177 / 163 | 169 / 47 | 177 | 3 370 | Oui, après ticks |
|
||
| `42` | 129 / 114 | 116 / 53 | 129 | 181 | Oui, après ticks |
|
||
| `42` | 112 / 107 | 105 / 161 | 112 | 354 | Oui, après ticks |
|
||
| `8675309` | 154 / 149 | 128 / 149 | 7 | 7 | Oui, après ticks |
|
||
| `8675309` | 153 / 112 | 87 / 58 | 153 | 871 | Oui, après ticks |
|
||
|
||
Chaque groupe réunit deux bassins retenus à des niveaux différents. Le
|
||
diagnostic suit l’eau réelle depuis chaque bouche, horizontalement ou en
|
||
descendant, sans mouvement vers le haut, jusqu’au bassin cible ;
|
||
un exutoire terminal sans bassin cible n’est pas compté comme cette liaison.
|
||
La descente est mesurée sur ce parcours propre à la bouche. Les nouveaux
|
||
blocs accessibles en sont les eaux écoulées qui n’étaient ni retenues dans
|
||
les bassins ni présentes avant la simulation. Les exutoires terminaux
|
||
facultatifs doivent descendre d’au moins douze blocs réels.
|
||
|
||
Les terrasses sont limitées à trois blocs de profondeur et cinq blocs
|
||
d’incision ; les lacs, à huit blocs de profondeur et douze blocs d’incision.
|
||
Pour les terrasses, le diagnostic exige aussi quatre blocs d’air naturel
|
||
au-dessus de chaque colonne excavée, en plus des fonds et supports conservés.
|
||
|
||
| Graine | Longueur rivière | Déplacement | Niveau Y | Colonnes d’eau | Colonnes des bassins terminaux | Sources liées |
|
||
| --- | --- | --- | --- | --- | --- | --- |
|
||
| `0` | 409,8 | 199,7 | 243 | 2 863 | 240 / 241 | 1 |
|
||
| `42` | 247,8 | 171,0 | 247 | 1 712 | 254 / 247 | 1 |
|
||
| `8675309` | 340,7 | 251,3 | 239 | 2 247 | 265 / 244 | 1 |
|
||
|
||
La longueur additionne les déplacements du tracé, diagonales comprises. Les
|
||
bassins terminaux et l’arrivée de leur cascade sont contrôlés après les ticks.
|
||
|
||
| Graine | Colonnes du lac | Blocs d’eau réels | Profondeur retenue maximale |
|
||
| --- | --- | --- | --- |
|
||
| `0` | 728 | 3 746 | 8 |
|
||
| `42` | 722 | 3 027 | 8 |
|
||
| `8675309` | 992 | 4 978 | 8 |
|
||
|
||
Chaque ligne décrit un site classé `LAKE`, après simulation. Les étangs,
|
||
bassins de rivière et terrasses sont consignés dans leurs propres catégories.
|
||
|
||
| Graine | Eau retenue, geysers inclus | Dont sources de geyser | Eau hors retenues | Eau totale | Lave totale | Sources de lave | Coulées | Accès poche de lave |
|
||
| --- | --- | --- | --- | --- | --- | --- | --- | --- |
|
||
| `0` | 9 845 | 1 | 4 971 | 14 816 | 144 | 20 | 2 | `(96, 100, -45)` |
|
||
| `42` | 7 267 | 4 | 903 | 8 170 | 144 | 20 | 2 | `(67, 133, -108)` |
|
||
| `8675309` | 10 268 | 5 | 1 230 | 11 498 | 144 | 20 | 2 | `(-93, 156, -21)` |
|
||
|
||
Ces volumes sont mesurés après 1 800 ticks actifs ; ils ne mesurent pas un
|
||
débit et ne signifient pas que les coulées ont atteint leur état final.
|
||
L’eau retenue correspond au volume attendu après décoration et comprend
|
||
les sources propres aux geysers. Les composantes extérieures sont rattachées
|
||
aux sources rocheuses ou aux débordements déclarés, avec leurs raccords
|
||
réels. La lave des coulées est distinguée de la poche couverte.
|
||
|
||
| Graine | Sols de mousse | Sols de podzol | Sols de mycélium |
|
||
| --- | --- | --- | --- |
|
||
| `0` | 13 175 | 10 936 | 5 074 |
|
||
| `42` | 4 897 | 3 712 | 2 200 |
|
||
| `8675309` | 10 058 | 6 714 | 3 293 |
|
||
|
||
Les stocks suivants portent sur les seuls chunks inspectés, avant les
|
||
ticks de fluides. Les variantes ordinaires et d’ardoise de chaque minerai
|
||
sont additionnées. Ce relevé ne couvre pas toute l’île et ne déclenche
|
||
jamais de remplissage pour atteindre un quota.
|
||
|
||
| Minerai | Graine 0 | Graine 42 | Graine 8675309 |
|
||
| --- | --- | --- | --- |
|
||
| Charbon | 7 858 | 6 788 | 4 992 |
|
||
| Fer | 3 224 | 2 700 | 2 172 |
|
||
| Cuivre | 2 439 | 2 132 | 1 621 |
|
||
| Or | 930 | 687 | 507 |
|
||
| Redstone | 924 | 631 | 523 |
|
||
| Lapis | 278 | 279 | 137 |
|
||
| Diamant | 162 | 86 | 88 |
|
||
| Émeraude | 64 | 41 | 42 |
|
||
|
||
| Matière | Graine 0 | Graine 42 | Graine 8675309 |
|
||
| --- | --- | --- | --- |
|
||
| Tuf | 657 813 | 491 736 | 239 434 |
|
||
| Cobblestone | 285 441 | 172 282 | 162 791 |
|
||
| Cobblestone moussue | 593 694 | 420 042 | 229 846 |
|
||
| Boue compactée | 168 698 | 167 276 | 158 922 |
|
||
| Ardoise des abîmes | 1 443 679 | 901 821 | 858 181 |
|
||
| Roche noire | 539 269 | 275 994 | 324 101 |
|
||
| Basalte | 605 828 | 390 889 | 307 652 |
|
||
| Soufre | 87 811 | 57 838 | 82 209 |
|
||
| Cinabre | 11 797 | 13 597 | 20 095 |
|
||
|
||
La sélection des chunks suit les sites d’eau et d’écologie ; elle n’est pas
|
||
un échantillon représentatif de toute l’île. Ces stocks ne démontrent pas
|
||
l’accessibilité de chaque bloc et ne prouvent pas, seuls, une réduction du
|
||
soufre par rapport à une autre version sur un périmètre différent.
|
||
Le tableau des minerais extérieurs sélectionne charbon, fer et cuivre ; les
|
||
JSON gardent les autres familles effectivement observées avec une face d’air.
|
||
|
||
| Graine | Réentrée source d’eau | Réentrée source de lave | Réentrée débordement |
|
||
| --- | --- | --- | --- |
|
||
| `0` | 1 vérifiée(s) | 1 vérifiée(s) | 1 vérifiée(s) |
|
||
| `42` | 1 vérifiée(s) | 1 vérifiée(s) | 1 vérifiée(s) |
|
||
| `8675309` | 1 vérifiée(s) | 1 vérifiée(s) | 1 vérifiée(s) |
|
||
|
||
Après consommation des marqueurs, les rappels du post-traitement préservent
|
||
les modifications témoins apportées aux bouches ; les blocs sont restaurés
|
||
ensuite. Les 176 fichiers historiques suivis hors raccordement
|
||
conservent leur SHA-256. Aucun monde personnel n’est ouvert par ces tests.
|
||
|
||
Preuves locales ignorées : `build/alpha9-check-build-final.log` (build et graine 0),
|
||
`build/alpha9-seed42-final.log`, `build/alpha9-seed8675309-final.log` et les rapports
|
||
`cavern-seed-<graine>-after-1800-ticks.json` et `-postprocessing-reentry.json`
|
||
sous `mods/sanctuary/build/run/gameTest/diagnostics/`.
|
||
`build/report-alpha9-validation.py` extrait les mesures et vérifie les preuves
|
||
cumulées, le gel des sources et les journaux. Le hash final du JAR est lu
|
||
dans `build/alpha9-jar-sha256.txt`, sans valeur codée dans l’extracteur.
|
||
|
||
Ces résultats ne garantissent aucune géode, terrasse, rivière, geyser ou
|
||
ressource sur chaque graine. L’appréciation visuelle et l’équilibrage en
|
||
partie restent ouverts. La release alpha.9 et le canal packwiz sont publiés
|
||
depuis `40b6555`. Deux synchronisations avec le véritable installateur
|
||
réussissent dans un dossier isolé, puis deux dans la même instance Prism.
|
||
Un seul JAR Sanctuary alpha.9 est actif ; 260 fichiers personnels et réglages
|
||
conservent leurs hashes. L’ancien JAR et les manifestes sont sauvegardés hors
|
||
de `mods/`. Voir [Distribution](packwiz.md) pour le hash public du JAR.
|
||
|
||
## 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 à l’intérieur des traces :
|
||
ce nombre ne mesure pas la longueur complète des canyons.
|
||
|
||
| Graine | Longueur rivière | Déplacement | Niveau Y | Colonnes d’eau | 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 l’arrivée réelle de la cascade sont contrôlés. Le
|
||
tracé est arrondi à l’échelle de 16 à 32 blocs, avec un lit d’environ 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. L’eau 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 lorsqu’elle est présente ; ses coordonnées
|
||
d’accè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
|
||
d’ardoise 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 l’accessibilité 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 d’air 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 lorsqu’elle
|
||
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 d’arbre remarquable ; il est volontairement orienté par ces
|
||
sites, sans prétendre donner un pourcentage représentatif de l’île.
|
||
|
||
| Graine | Réentrée bouche d’eau | 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 n’est 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.
|
||
L’appré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](packwiz.md).
|
||
|
||
## 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 l’emplacement de l’arbre remarquable. Ce n’est 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 d’air 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 d’arbre rare : l’espace et les conditions après
|
||
décoration restent déterminants. Aucun terrain n’est 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 l’emprise 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 n’est 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 ; l’appré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,
|
||
l’exclusion 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 l’emprise 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 d’entité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 d’eau réelles, sans eau orpheline ni voisin
|
||
horizontal en dehors de l’emprise inspectée. Les seuls sites de surface sont
|
||
des étangs et des lacs ; aucune rivière n’est 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 d’origine.
|
||
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 l’examen
|
||
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 s’agit pas d’un 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 l’emprise.
|
||
|
||
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 d’avant 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 n’est 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, d’hydrologie 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 d’eau 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 l’eau 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 l’herbe. Quelques petites poches restent anguleuses à l’échelle du bloc.
|
||
Les profils montrent les cascades réelles ; ces lectures de blocs ne remplacent
|
||
pas l’appré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 d’or, 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 n’ont 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 l’essai 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
|
||
d’un 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 d’un étang. Le diagnostic conserve cette décoration et distingue le
|
||
volume d’eau prévu des sources restantes : seuls des troncs horizontaux de
|
||
surface jouxtant une source, avec de l’eau dessous ou le fond peu profond
|
||
plein, sont acceptés. Leur position et leur état exacts, l’appui ou l’eau sous
|
||
le bois, les parois et le reste des sources sont vérifiés
|
||
après simulation. Le contrôle de continuité du cours d’eau 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 l’ordre 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 d’eau
|
||
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é. L’emprise
|
||
reste celle prévue initialement avec son halo d’un chunk, sans élargissement
|
||
après observation des écoulements. Sur la graine 8675309, les trois composantes
|
||
comptent 2 445, 1 152 et 363 blocs d’eau après simulation ; toutes rejoignent
|
||
leur source et restent entièrement dans les chunks inspectés.
|
||
Les anciennes classes et ressources de terrain et d’hydrologie sont également
|
||
comparées octet par octet avec l’alpha.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 d’eau est
|
||
exécuté sur les graines 8675309 et 0 ; l’essai 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 d’eau qu’elles produisent, sans exiger
|
||
qu’une graine arbitraire soit artificiellement complétée.
|
||
|
||
| Graine | Spawn naturel | Eau après 200 ticks | Canne à sucre | Chunks FULL inspectés | Raccords d’eau 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 d’eau est à **Y=250**, de **X=−48, Z=48** à
|
||
**X=−20, Z=−20**. Son chemin suit 18 points et relie deux petites poches d’eau.
|
||
Deux petits lacs et quatre étangs sont également présents, en comptant la poche
|
||
de départ du cours d’eau. La graine `42` produit elle aussi un cours d’eau, à
|
||
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
|
||
d’eau observé sur chacune. Les contrôles comparent chaque bloc d’eau avant et après une simulation réelle
|
||
confirmée par un témoin d’écoulement et l’activité de tous les chunks concernés.
|
||
Les quantités d’eau restent identiques. Les cartes des vrais blocs ont été
|
||
inspectées : les lacs sont arrondis et les chenaux restent continus. Le tracé
|
||
des cours d’eau comporte encore des segments géométriques ; l’appré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 n’est pas relancé à l’identique. Les tests de forme et
|
||
d’hydrologie pure, la compilation et l’assemblage 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 l’hydrologie, 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](expansion.md).
|
||
|
||
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.
|