Files
sanctuary-beta/docs/testing-alpha14.md
T
koka c576d655ae
Build Sanctuary / build (push) Canceled after 0s
Record alpha.14 release and existing Prism update
2026-09-09 14:02:47 +02:00

363 lines
22 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Alpha.14 — Lost City et expansions
**État : alpha.14 vérifiée, publiée et installée dans la même instance Prism Mac.**
`check build assemblePack` passe sur les sources finales avec les **8 GameTests
requis**, le 9 septembre 2026 à **13 h 57 min 48 s**. La création de quartiers,
leur réouverture et la reprise différée du vide passent également dans leurs
mondes de développement distincts. Le JAR, le MRpack et le ZIP Prism sont
vérifiés. La release immuable correspond au commit source `1c5c2c2`, le canal
packwiz au commit `dabf57e`. Deux synchronisations isolées puis deux dans la même
instance Prism passent, avec **713 fichiers personnels et réglages suivis
conservés**. Le [reçu de livraison](packwiz.md#alpha14-publiée--9-septembre-2026)
consigne les artefacts, leur empreinte et la sauvegarde ciblée.
Les résultats des alpha.12, 13 et 13.1 restent historiques. Ticket [WG-17](backlog.md).
Les smokes des sources finales passent sous Gradle et Java 25 :
`LostCityRendererSmoke` pour les 17 types, dont confinement
et accès des piscines dans quatre orientations, parcs distincts et sous-sols ;
`ExpansionJournalSmoke`, dont limmuabilité du jeton de reprise du vide ; et
le contrôle de placement spatial de génération 14. `LostCityPlannerSmoke`
passe également. Ses
32 graines sur terrain contrôlé couvrent tous les types de lots ; un témoin
distinct de faille couvre le pont, soit les 17 types. Le test de pente ascendante
et descendante protège la sélection des lots contre le rejet asymétrique des
terrains montants. Sur lancien planificateur compilé, ce nouveau test échouait
avec **0 contre 9 lots** ; le planificateur corrigé satisfait l’égalité des
deux sens et le minimum de cinq lots demandé par le test. Cette comparaison
provient de la sortie dexécution ; aucun journal séparé na été conservé.
`:sanctuary:expansionVoidCertificateSmoke` passe aussi sous Gradle :
champs NBT natifs obligatoires, types stricts, refus des contenus, preuves de
chunks absents et stabilité du certificat face aux seuls compteurs volatils.
Ces contrôles unitaires sont complétés par les essais moteur consignés plus
bas.
## Périmètre et création dun monde
Minecraft **26.3-pre-2**, Fabric et Java **25**, selon les versions épinglées dans
`gradle.properties`. La livraison cible `0.1.0-alpha.14` pour le mod et le pack.
Créer un **nouveau monde**, type **Sanctuary**, puis le bouton natif
**Personnaliser** : Petit 512, Moyen 724 par défaut ou Grand 1 024 blocs de
diamètre nominal. La hauteur reste de 384 blocs. Le codec public est
`sanctuary:island_v14` ; les racines et les extensions de ces mondes portent la
génération **14**. Le journal est séparé :
`data/sanctuary-world-v14/expansions.json`, schéma 1.
Les mondes de générations 12 et 13 conservent leurs codecs, paramètres et
journaux. Ils ne reçoivent pas Lost City par conversion et ne changent pas de
générateur au chargement. Aucune sauvegarde personnelle ne doit être utilisée
pour les essais ci-dessous.
## Lost City
Les quartiers sont composés par du code Sanctuary original. Une poche urbaine
peut être retenue sur l’île initiale ; les extensions de profil `lost_city`
recherchent également des emplacements. Le biome suit les parcelles acceptées
en surface et laisse les biomes de cavités profonds. Une île peut ne fournir
aucun site convenable : la ville et ses différents types ne sont pas garantis.
| Type | Aménagement distinctif |
| --- | --- |
| Rue | Chaussée, bordures de pierre lisse et variations de hauteur accessibles |
| Pont | Tablier et garde-corps au-dessus dune courte faille, appuis naturels aux deux extrémités |
| Parc boisé | Chemins croisés, arbres et bancs |
| Jardin | Haies basses, parterres fleuris et allées |
| Aire de jeux | Sable, portique de balançoire, plate-forme et petit toboggan |
| Parc mémorial | Cour, monument de pierre et bancs |
| Place | Pavage et fontaine sèche |
| Marché | Étals, auvents sobres et réserves |
| Parking | Places marquées, poteaux, garage souterrain si la roche le permet, sinon en surface |
| Excavation | Fouille ouverte, fondations inachevées, barrières et escalier |
| Piscine abandonnée | Bassin de trois couches deau, marches immergées et plage minérale |
| Immeuble dappartements | Étages, chambres, coin cuisine et escaliers |
| Hôtel | Réception, couloir central et chambres séparées |
| Bibliothèque | Rayonnages, tables de lecture et pupitre |
| Restaurant | Cuisine équipée et tables, espace de service à l’étage |
| Caserne | Dortoirs et réserves |
| Hall | Grande salle, estrade, rangées de sièges et balcon |
Pierre, pierre lisse et briques de pierre dominent ; briques fissurées ou
moussues, andésite, vitres, détails de fer et intérieurs en chêne noir complètent
la palette. Lusure est déterministe. Les accès et les escaliers restent
distincts des brèches de façade et de toiture. Le butin des coffres utilise des
tables vanilla différées ; aucune génération de spawner ou de villageois.
Le spawn naturel de monstres du biome et des pièces de structure est limité aux
zombies vanilla. Lumière, difficulté, limites de population et distance aux
joueurs continuent de sappliquer ; une ruine nimplique pas la présence immédiate
dun groupe de zombies. Les classes de zombies spécifiques restent pour la bêta.
Le placement vérifie la roche sous toute lemprise. Un sous-sol, une piscine ou
une excavation exige une continuité jusqu’à huit blocs sous le plancher de
référence. À défaut, le parking reste en surface et piscine ou excavation se
replient en parc. Les piscines gardent un fond et des parois continus ; les
ponts ne construisent pas de piliers jusquau vide. Les volumes protégés de
lhydrologie et les sites insuffisamment supportés sont écartés.
## Commandes dessai et placement des expansions
Les commandes restent des outils opérateur, accessibles avec les permissions
adéquates. Elles nutilisent pas encore la progression ou les ressources.
```text
/sanctuary expansion quick east lost_city 256 natural
/sanctuary expansion list
/sanctuary expansion visit island_1
/sanctuary expansion preview quartier sanctuary northeast lost_city 128 natural
/sanctuary expansion create quartier sanctuary northeast lost_city 128 natural
/locate structure sanctuary:lost_city
```
`island_1` est lexemple du premier identifiant libre créé par `quick` ; utiliser
lidentifiant réellement indiqué par la commande. `visit` attend une île prête.
`preview` examine un emplacement sans lactiver. `resume <id>` sert à reprendre
une réservation interrompue. `create` choisit aussi son parent explicitement.
La recherche exacte `/locate structure sanctuary:lost_city` retrouve les
quartiers Sanctuary admissibles ; elle peut échouer si aucun quartier ne se
trouve dans sa portée de recherche. Un profil `lost_city` ne garantit pas un
terrain suffisamment adapté pour accepter un quartier.
Les diamètres dexpansion possibles dans les mondes 14 sont **64, 128, 256,
512 et 1 024**. Avec `quick east` ou `quick east lost_city`, le diamètre est tiré
de manière reproductible à partir de la graine et de lidentifiant :
| Diamètre | Poids du tirage |
| --- | --- |
| 64 | 40 % |
| 128 | 30 % |
| 256 | 18 % |
| 512 | 9 % |
| 1 024 | 3 % |
Ces poids décrivent la distribution du tirage, pas un quota de cinq îles à
reproduire sur chaque serveur. Une taille explicite remplace le tirage. Les
recherches demplacement ne changent ni cette taille ni la graine retenue.
Les mondes historiques gardent leurs tailles et comportements antérieurs.
La direction choisit un secteur de 45° autour du parent. La recherche essaie
dabord des positions proches, puis des couronnes plus éloignées, avec un
nombre borné de candidats. Les centres restent alignés sur les chunks.
Les emprises circulaires incluent le terrain, la marge de décoration et une
garde empêchant deux îles de posséder le même chunk de coin. Le voisinage lu
par les étapes de génération nest pas intégralement réservé comme terrain.
Une distance minimale entre centres reste possible comme dernier argument.
## Contrat de reprise différée du vide
Ce mécanisme concerne **uniquement les nouveaux mondes de génération 14** et
une expansion explicitement demandée. Les générations 12/13 gardent leur refus
des chunks déjà générés, même vides. Il ne permet pas la régénération générale
dune île, dun terrain occupé ou dune construction.
1. Examiner toute lemprise d’écriture et produire, pour chaque chunk existant,
une preuve stricte quil est FULL, entièrement vide et vierge. Les positions
encore absentes sont également certifiées, y compris leurs stockages
dentités et de POI. La simple absence de bloc visible ne suffit pas : entités
persistées, chargées ou en attente, POI, ticks, événements de blocs et autres
indices de contenu font partie des refus.
2. Lier le certificat à lidentité exacte de lexpansion et à un jeton immuable
dans le journal. Une preuve isolée sans réservation correspondante ne donne
aucune autorisation ; un changement de paramètres ou une preuve manquante
doit faire échouer la reprise.
3. Enregistrer la réservation et demander de **fermer puis rouvrir le monde**.
Lexpansion reste différée pendant la session ayant établi la preuve.
4. Au chargement suivant, vérifier le journal, le certificat et les données
actuelles sur toute lemprise avant toute préparation. Une divergence bloque
la reprise avant l’écriture des positions absentes. Seuls les chunks
explicitement certifiés peuvent être réutilisés par cette expansion.
La preuve lit le format natif exact de Minecraft 26.3-pre-2 : l’état dair sans
propriétés s’écrit comme la chaîne `minecraft:air` dans la palette ; sa forme
composée autorisée utilise le champ `id`. Lancien champ `Name` ne suffit pas
à certifier un chunk. Les types NBT, sections, palettes, heightmaps et données
annexes restent contrôlés strictement ; une métadonnée inconnue provoque un
refus. Seuls les compteurs temporels et caches de lumière valides sont exclus
de lempreinte sémantique du vide.
Il ne faut supprimer ni certificat, ni journal, ni dossier de région pour
débloquer une commande. Labsence de preuve est un refus, pas une invitation à
reconstruire lhistorique. Les sauvegardes personnelles ne sont pas ouvertes
par les tests ou par la mise à jour packwiz.
## Protocole et preuves attendues
Un seul processus Gradle ou Minecraft de développement à la fois. Les suites
de création repartent de mondes ignorés sous `mods/sanctuary/build/run/`.
Un scénario de réouverture doit suivre sa création sans intercaler un test qui
effacerait ce monde de développement.
```sh
./gradlew :sanctuary:lostCityPlannerSmoke :sanctuary:lostCityRendererSmoke --console=plain
./gradlew check build assemblePack -PsanctuaryTestSeed=0 -PsanctuaryResourceSurvey=off -PsanctuaryDensityMaps=false --console=plain
./gradlew :sanctuary:runGameTest -PsanctuaryLostCityTests=true -PsanctuaryTestDiameter=724 -PsanctuaryTestSeed=0 -PsanctuaryResourceSurvey=off -PsanctuaryDensityMaps=false --console=plain
./gradlew :sanctuary:runGameTest -PsanctuaryLostCityTests=true -PsanctuaryExpansionReload=true -PsanctuaryTestDiameter=724 -PsanctuaryTestSeed=0 -PsanctuaryResourceSurvey=off -PsanctuaryDensityMaps=false --console=plain
```
La suite de reprise du vide repart ensuite dun **autre monde de développement
neuf**. La commande de réouverture est exécutée deux fois de suite :
```sh
./gradlew :sanctuary:runGameTest -PsanctuaryVoidReuseTests=true -PsanctuaryTestSeed=0 -PsanctuaryResourceSurvey=off -PsanctuaryDensityMaps=false --console=plain
./gradlew :sanctuary:runGameTest -PsanctuaryVoidReuseTests=true -PsanctuaryExpansionReload=true -PsanctuaryTestSeed=0 -PsanctuaryResourceSurvey=off -PsanctuaryDensityMaps=false --console=plain
./gradlew :sanctuary:runGameTest -PsanctuaryVoidReuseTests=true -PsanctuaryExpansionReload=true -PsanctuaryTestSeed=0 -PsanctuaryResourceSurvey=off -PsanctuaryDensityMaps=false --console=plain
```
### Résultats moteur — graine 0
Le 9 septembre 2026, la création sur les sources finales passe à **13 h 55 min
15 s** dans le processus **19155** (`build/alpha14-city-final-create.log`,
deux tests requis réussis, commande terminée en **2 min 24 s**). La réouverture
du même monde de développement passe à **13 h 55 min 58 s** dans un second
processus, **19372** (`build/alpha14-city-final-reload.log`, deux tests requis
réussis, **33 s**).
Ces durées sont celles des commandes Gradle complètes, pas des mesures de
chargement en jeu ou de performance multijoueur.
Les rapports locaux ignorés sont
`mods/sanctuary/build/run/gameTest/diagnostics/lost-city-alpha14-seed-0.json`
et `lost-city-alpha14-reload-seed-0.json` dans le même dossier. Leurs copies
sont conservées dans `build/alpha14-evidence/` avant le nettoyage du monde de
développement. Le monde racine est de diamètre **724**, graine **0**, codec
`sanctuary:island_v14`.
Trois extensions de diamètre 256 ont été examinées en lecture seule :
| Candidat | Graine de lextension | Quartiers admissibles |
| --- | --- | --- |
| `city_test` | `7890860792428309400` | 0 |
| `city_harbor` | `-1594320136210322067` | 0 |
| `city_gardens` | `6666275329838981856` | 1 |
Seule `city_gardens` a ensuite été activée, à lest, centre **(2032, 624)**.
Sa préparation a terminé **418 chunks FULL**. Linspection urbaine ci-dessous
couvre les chunks des quartiers, pas la totalité de cette préparation.
| Site généré | Parcelles sauvegardées | Chunks FULL inspectés | Coffres non ouverts à butin différé |
| --- | --- | --- | --- |
| Île initiale | 26 : appartement, hôtel, bibliothèque, marché, parc boisé, mémorial et 20 rues | 26 | 4 |
| `city_gardens` | 12 : appartement, parc boisé et 10 rues | 13 | 1 |
Les deux quartiers possèdent leurs références de structure natives ; la
recherche native retrouve respectivement **(-49, 253, 13)** et **(2012, 229,
621)**. Les intérieurs traversables et les tables de spawn limitées aux zombies
sont contrôlés. Cela ne garantit pas des zombies visibles de jour. La
couverture des **17 types dans quatre orientations** provient de 68 rendus
témoins indépendants ; elle ne signifie pas que cette graine contient tous les
types dans ses quartiers naturels.
Linspection native des bâtiments contrôle également quaucun minerai ne
remplace la maçonnerie dans leurs volumes à partir du plancher. Cette preuve
concerne les bâtiments effectivement générés et inspectés ; les minerais du
terrain sous les fondations restent possibles.
Une piscine native isolée, indépendante du tirage des quartiers, conserve
**189 cellules deau**, ses marches et son confinement après lexécution dun
tick deau. La réouverture conserve les mêmes 189 cellules et les marches ;
elle nexécute pas un second tick témoin.
Dans le second processus, les **38 pièces natives**, les **5 coffres non
ouverts**, le bloc dor témoin à **(-61, 250, 11)** et le journal sont conservés.
Lempreinte du journal contrôlé est
`38e4bc1b2e493628d1e5d1775250c0bc48821bf49d025df3c37159fcff5801ba`.
Ces essais utilisent uniquement un monde de développement ignoré, sans ouvrir
de sauvegarde personnelle.
### Reprise du vide — création et deux réouvertures
Les trois exécutions Minecraft, sur la graine **0**, génération **14**, passent
le 9 septembre 2026 :
| Étape | Journal local | Résultat et durée de la commande |
| --- | --- | --- |
| Preuves et réservations | `build/alpha14-void-create.log` | Deux tests requis réussis à 13 h 43 ; 41 s |
| Première réouverture | `build/alpha14-void-reload.log` | Deux tests requis réussis à 13 h 45 ; 1 min |
| Deuxième réouverture | `build/alpha14-void-second-reload.log` | Deux tests requis réussis à 13 h 46 ; 29 s |
Les rapports sont `void-reuse-before-reload.json`,
`void-reuse-after-reload.json` et `void-reuse-second-reload.json`, sous
`mods/sanctuary/build/run/gameTest/world/`. Ce sont des preuves locales à
conserver avant le nettoyage du monde de développement.
La première expansion, `void_loaded`, couvre **77 chunks FULL vides déjà
chargés**. La seconde, `void_saved`, couvre **un chunk FULL vide uniquement
stocké et 76 positions absentes**. Ce dernier scénario emploie une copie NBT
native de chunk vide, déplacée uniquement pour constituer le témoin dans ce
monde jetable. Chaque réservation reçoit son jeton durable propre et reste
différée, sans publication dans le générateur pendant la session initiale.
Quatre témoins indépendants, chacun contrôlé vide avant modification, prouvent
le refus dun **bloc**, dun **coffre avec son entité de bloc**, dune **entité
vivante enregistrée** et dun **tick de bloc programmé**. Une métadonnée NBT
étrangère ajoutée après certification fait également échouer la vérification
globale : lempreinte SHA-256 du fichier de région et le contenu NBT modifié
restent identiques après ce refus. Le test restaure ensuite son témoin vide
pour poursuivre le scénario positif.
À la première réouverture, les deux expansions atteignent **154 chunks FULL**,
chacun conservant le marqueur de son jeton exact, avec **128 sections non
vides**. Un bloc dor témoin est alors posé à **(6080, 376, 1264)**. À la
deuxième réouverture, il est préservé : les **154 chunks FULL marqués** et
**129 sections non vides** sont retrouvés. Ce passage contrôle donc aussi
quune reprise terminée ne réinitialise pas les blocs ajoutés ensuite.
Une réouverture supplémentaire passe à **13 h 48**, avec deux tests requis
réussis en **37 s** (`build/alpha14-void-final-reload.log`). Elle contrôle
explicitement la lumière native terminée (`isLightCorrect`) sur les **154
chunks** et **32 échantillons de biomes hors `the_void`** à lintérieur des
extensions. Le bloc dor et les 129 sections non vides sont toujours conservés.
Ce dernier rapport est copié hors du monde de test dans
`build/alpha14-evidence/void-reuse-second-reload.json` pour survivre à son
nettoyage. Les 32 échantillons ne constituent pas un relevé exhaustif de tous
les biomes des extensions.
### Vérification finale du build et des artefacts
`./gradlew check build assemblePack` passe en **1 min 34 s** : **40 tâches**, dont
33 exécutées et 7 à jour. Le journal est `build/alpha14-check-build-pack.log`.
Les huit tests moteur requis réussissent ; le témoin hydrologique de graine 0
contrôle **125 chunks FULL**, **5 923 blocs deau conservés** et **1 800 ticks de
fluides**. La même suite vérifie la sérialisation des tailles **512 / 724 /
1 024**, le défaut Moyen et le codec historique de génération **13**.
Le smoke du journal valide aussi la politique de synchronisation de dossier
Windows par simulation, ainsi que les échecs de stockage après remplacement.
Ce résultat ne constitue pas une exécution native sous Windows.
`build/verify-alpha14-artifacts.py` valide les versions alignées, lindex packwiz,
le JAR de production sans classes de test, son inclusion dans le MRpack et le
ZIP damorçage Prism. Le SHA-256 du JAR `sanctuary-0.1.0-alpha.14.jar` est :
```text
1c517a13e1151501c6f4974d1bc00faedf67aaecd9bf58f34ac4a655d09dc6ef
```
Ces vérifications portent sur les artefacts locaux. La publication du canal,
les installations packwiz isolées et la synchronisation de linstance Prism
restent à consigner.
| Contrôle | Preuve attendue | État de livraison |
| --- | --- | --- |
| Géométrie et fondations | Déterminisme, budget de colonnes, sites protégés, certificat de roche et ponts | Smoke Gradle réussi sur les sources finales |
| Rendu des 17 types | Quatre orientations, limites des pièces, parcours vers les étages, lits complets, accès aux sous-sols et piscine contenue | Smoke Gradle réussi sur les sources finales |
| Placement des expansions | Cinq tailles, tirage stable, huit secteurs, séparation et garde aux coins | Smoke Gradle réussi sur les sources finales |
| Structures dans Minecraft | Quartier initial et extension Lost City réellement générés, références natives et coffres à butin différé | Réussi, graine 0 : 38 pièces et 5 coffres |
| Rechargement dans un second processus | Journal et structures identiques, butin non recréé, bloc témoin de joueur conservé | Réussi sur les sources finales, graine 0, processus 19372 |
| Protection de la maçonnerie | Aucun minerai dans les volumes des bâtiments à partir de leur plancher | Réussi sur les quartiers natifs inspectés, graine 0 |
| Eau après ticks moteur | Piscine retenue et accès après écoulement, sans fuite extérieure | Réussi sur piscine native isolée : 189 cellules et marches conservées après tick puis réouverture |
| Certificat de vide | Schéma NBT strict, refus des contenus et preuves de chunks absents | Smoke Gradle réussi, complété par les témoins natifs de création |
| Reprise du vide | Refus des contenus et preuves invalides ; reprise bornée après réouverture avec preuve intacte | Réussi après deux réouvertures : 154 chunks FULL marqués, bloc dor conservé |
| Lumière et biomes après reprise | Lumière native terminée et remplacement du biome vide à lintérieur des extensions | Réussi à 13 h 48 : 154 chunks éclairés correctement, 32 échantillons hors `the_void`, bloc dor conservé |
| Sérialisation et stockage | Trois tailles, codec historique et erreurs de stockage bloquantes | Suite native réussie pour les trois tailles et le codec 13 ; politique Windows simulée réussie |
| Hydrologie conservée | Eau retenue après écoulement moteur | Réussi : 125 chunks FULL, 5 923 blocs deau, 1 800 ticks de fluides |
| Build et pack | `check build assemblePack` réussi avec versions alignées | Réussi à 13 h 57 min 48 s, huit GameTests requis, JAR/MRpack/ZIP Prism vérifiés |
| Distribution | Artefacts immuables vérifiés, canal avancé, deux installations isolées et deux synchronisations de la même instance | Réussi : source `1c5c2c2`, canal `dabf57e`, 713 fichiers personnels et réglages suivis conservés |
Les reçus locaux sont `build/alpha14-isolated-validation.json` et
`build/alpha14-prism-validation.json`. Aucun essai Windows natif, mesure de FPS ou test
de charge multijoueur nest attesté par cette liste. Une validation de géométrie
en mémoire ne remplace pas la génération, les ticks et la persistance du moteur.
La publication suit [Distribution packwiz et Prism](packwiz.md). Elle conserve
linstance existante, ses sauvegardes, ses réglages et les mods tiers.