# Alpha.22 — placement sélectif Ticket WG-25, branche `codex/placement-selectif-alpha22`. Minecraft 26.3-pre-2, Fabric Loader 0.19.5, Fabric API 0.160.0+26.3 et Java25, sans changement de dépendances. ## Contrat Les bâtiments de surface redeviennent sélectifs : une ville peut être absente si aucun emplacement n’est adéquat. Deux éléments de base sont prioritaires : **la grande traversée souterraine et la salle d’expansion**, même sans ville. Leurs emplacements sont réservés avant les petits réseaux et le catalogue expérimental. Une recherche bornée ne prouve pas qu’aucun autre emplacement possible n’existe dans toute l’île. - Ville : aucune réserve artificielle de secours, aucun pilier de rattrapage, terrassement/remblai limité à deux blocs par colonne. Les fondations sont entièrement recertifiées dans la roche. Les quartiers supplémentaires exigent un chemin complet vers les quartiers retenus. Au plus trois propositions dans un budget partagé de20 000 colonnes et1 120 000 contrôles de volume. - Infrastructures : relief maximal de quatre blocs sur l’emprise17×17, coupe et remblai limités à deux blocs, deux couches de roche intacte sous chaque colonne de fondation, sans piliers de secours. Jusqu’à24 candidats par famille, avec les mêmes plafonds globaux de16 000 colonnes et800 000 sondages. - Chemins patrimoniaux : coupe/remblai limité à un bloc, accès indépendant et raccord complet requis pour publier une liaison. - Traversée : conserve le génie civil21, avec deux accès réels, une chaussée de cinq blocs et deux trottoirs. Les piliers sont bornés à16 blocs ; les travées sans grille complète sont limitées à34 blocs et reposent sur les modules adjacents. La recherche22 intervient avant les structures facultatives pour leur réserver l’emprise. Si les lignes droites sont refusées, une seconde passe cherche des accès différents et des détours. Chaque passe est limitée à 12 000 colonnes et3 millions de sondages (24 000 et6 millions au total au plus). Ses parois peuvent traverser des cavités existantes sans écraser les volumes d’eau et de lave protégés. - Salle : recherche autonome d’un accès de surface et d’une salle25×25, sans faux quartier ni socle de ville. Une salle déjà présente sous une ville évite un doublon. Les égouts et annexes peuvent accompagner ce lieu indépendant. Les palettes, les plans intérieurs et les petits filons minables restent ceux de21. Les anciens petits réseaux expérimentaux17 et les sous-sols des villes gardent leur géométrie ; leurs protections restent respectées. Le nouveau principe narratif est documenté dans [la vision](vision.md) et [l’audit](structures-audit.md), sans activer de système de progression. ## Sauvegardes Le seul preset public utilise désormais `sanctuary:island_v22`. Le preset caché `sanctuary_v21` est la copie de l’ancien preset public. Les anciens codecs, planificateurs et rendus restent disponibles. Les pièces21 sont réutilisées avec leur format existant ; les nouveaux coudes possèdent une pièce22 distincte pour fermer leurs murs sans modifier les jonctions21 sauvegardées. La salle indépendante possède un type de structure22 et réutilise les pièces souterraines20. Le journal identifie la génération22 et refuse une lecture croisée avec21. Aucun monde personnel n’est ouvert, converti ou régénéré. Les nouvelles règles nécessitent un **nouveau monde Sanctuary**. Petit512, Moyen724 par défaut et Grand1024 restent proposés. L’option **Structures expérimentales** reste enregistrée à la création ; en22 elle retire le catalogue facultatif, tandis que la traversée et la salle restent des éléments de base. Le commutateur Minecraft général des structures demeure respecté. ## Témoin natif Moyen, graine0 La création et la réouverture dans deux JVM distinctes passent. La ville est refusée ; la traversée comporte23 modules, dont deux accès et une salle de maintenance. Son axe s’étend sur340 blocs. Les accès sont `-170 253 -100` et `170 254 -100`. Le hall d’expansion indépendant se rejoint par la trappe `2 252 0` ; son réseau comprend l’accès, la salle, deux passages et un égout. La piscine est une annexe conditionnelle, absente sur ce témoin. Les14 bâtiments patrimoniaux trouvent un terrain adapté ; sept liaisons sont retenues. Les115 chunks de l’emprise sont générés en statut FULL. Les plans, pièces natives et une modification témoin persistent après réouverture. Le contrôle natif de circulation vérifie la vraie trappe, les échelles soutenues, les ouvertures et le trajet jusqu’au socle central. Aucun déplacement de joueur ou chargement d’un monde personnel n’a été utilisé pour ces essais. ## Vérifications complémentaires **Petit512, graine42 :**17 modules, dont un coude sauvegardé avec sa pièce22, et une salle indépendante. Les anciens alignements droits sont refusés ; le repli trouve une paire d’accès naturels et conserve une chaussée continue. Les portiques sont `-68 250 -93` et `68 250 43`, la trappe du hall `43 244 -10`. La marche native relie les sorties en564 déplacements et atteint53 points de contrôle. Huit bâtiments patrimoniaux et six liaisons sont admis ; aucune ville n’est forcée. Les88 chunks de l’emprise sont vérifiés en statut FULL. **Grand1024, graine42 :** un quartier naturel est admis avec son réseau de sous-sols : salle d’expansion, piscine, égout et parking. Aucun hall autonome supplémentaire n’est créé. La traversée comporte31 modules et s’étend sur476 blocs ; portiques `-272 249 -8` et `204 250 -8`. La marche native les relie en740 déplacements et atteint98 points de contrôle. Quatorze bâtiments patrimoniaux et huit liaisons sont admis. Les179 chunks de l’emprise sont vérifiés en statut FULL ; la salle et ses17 ouvertures sont accessibles. Les tests purs des trois tailles passent sur des terrains plats adaptés ; falaises, eau/protections, vides et appuis insuffisants sont refusés pour les bâtiments. Le hall autonome et ses annexes sont vérifiés sans fixture de ville. Les suites historiques restent actives. Avec l’option expérimentale désactivée, le témoin Moyen conserve ses23 modules de traversée et sa salle indépendante, sans bâtiments patrimoniaux ni petits réseaux expérimentaux. La marche native relie les deux sorties en548 déplacements et atteint74 points de contrôle ; les échelles et l’accès au hall restent praticables. Les créations et réouvertures de génération21 sont identiques aux rapports de la release21, hors identifiants de processus et dossier de test. Les391 fichiers de production historiques qui ne nécessitent pas de raccord22 restent identiques octet pour octet ; le preset caché21 est la copie exacte du précédent preset public. Les masques sont vérifiés à l’intérieur et hors des structures. `check build assemblePack` passe :75 tâches, dont les huit GameTests généraux. Le JAR, l’index packwiz, le MRpack et le ZIP Prism sont vérifiés. Aucun code de test n’est embarqué dans le JAR. SHA-256 du JAR : ```text 10d7ef32ac2e81a977ea4854503bafa29e0bc10929984b76df01d6f5f61f9056 ``` SHA-256 du MRpack : ```text 0b553fcdd8b6a2ec26f72059e428d2cc0ce526f36ef8580dd3e50c1dfa40ec78 ``` Les reçus de publication et de synchronisation sont suivis dans [la distribution](packwiz.md). Ces témoins vérifient les trois tailles, avec et sans ville ; ils ne constituent pas une preuve de présence pour toutes les graines. La recherche reste bornée et refuse un volume protégé ou insuffisamment porté. Aucun essai visuel client ou essai Windows natif n’est revendiqué. ## Reproduire dans le dossier de développement Avec Java25, création du témoin Moyen puis réouverture du même monde de test : ```sh ./gradlew :sanctuary:runGameTest -PsanctuarySelective22Tests=true -PsanctuaryDensityMaps=false ./gradlew :sanctuary:runGameTest -PsanctuarySelective22Tests=true -PsanctuaryDensityMaps=false -PsanctuaryExpansionReload=true ``` Pour une nouvelle création Petit ou Grand, ajouter `-PsanctuaryTestSeed=42` et `-PsanctuaryTestDiameter=512` ou `1024`. Le cas OFF utilise `-PsanctuaryExperimentalStructures=false`. Chaque réouverture doit suivre la création correspondante, avec les mêmes paramètres. Les rapports sont dans `mods/sanctuary/build/run/gameTest/diagnostics/selective22--/`. Le témoin historique utilise `-PsanctuaryHeritage21Tests=true`, puis le même drapeau avec `-PsanctuaryExpansionReload=true`. La vérification de livraison reste `./gradlew check build assemblePack`. Exécuter ces JVM séquentiellement.