# STARTUP-01 — raccourcir la création de monde Branche : `codex/initial-loading`. Minecraft **26.3-pre-2**, Fabric Loader **0.19.5**, Fabric API **0.160.0+26.3**. Correctif local **beta.022**, préparé à partir du chantier beta.021 ; publication et instance Prism distinctes. ## Problème observé Les plans d’eau, de traversées et de structures sont calculés avant l’arrivée. Le profil JFR du serveur de développement situe le coût surtout dans les bruits Perlin du champ `PopulationIslandDensity`. Le message Minecraft `Time elapsed` arrive après la planification : il sous-estime donc la création totale. ## Correctif Les bruits restent identiques, mais leur évaluation devient conditionnelle : - À l’intérieur de `radius - 128`, le facteur d’érosion du bord est exactement nul. Le bruit du bord n’est pas nécessaire. - À partir de Y140, le facteur d’érosion inférieur est exactement nul, même avec les bruits à leurs bornes maximales. Le bruit du dessous est inutile. - Lorsque ces deux conditions sont réunies, les bruits de sculpture et de détail ne contribuent plus au champ, sauf dans l’ancienne variante à terrasses. - À partir de Y320, avec le repère vertical normal, l’érosion haute vaut au moins 2 pour un terrain borné à 1 : la densité de base vaut exactement -1. Les corps flottants sont toujours ajoutés ensuite par `FloatingTerrain306`. La variante historique 30.4, qui déplace le repère vertical, garde son calcul. Aucun plan n’est supprimé ou différé, aucun cache disque n’est ajouté. Les codecs, identifiants, graines et formats de sauvegarde restent inchangés. La suppression de calculs doit conserver exactement les mêmes valeurs, pas une approximation visuelle. Les essais utilisent uniquement des mondes de développement neufs. ## Mesures Mac Apple M1, 8 Gio, Java Temurin 25.0.3, tas JVM 2 Gio. Profil de départ Moyen 724, graine 0, structures actives, nouveau dossier de monde à chaque essai. | Mesure | Résultat | | --- | --- | | CPU de 441 colonnes, référence beta.021 | médiane 706,874 ms | | CPU des mêmes colonnes, correctif | médiane 567,929 ms | | Réduction de CPU sur ce travail | **19,66 %** | | Création serveur finale, du lancement du serveur de test à sa disponibilité | **89 s** | | Préparation finale du spawn seule, incluse dans ces 89 s | 4,578 s | Le benchmark CPU utilise la graine 42, 183 456 densités par passage, un échauffement puis trois paires alternées dans la même JVM. Les six empreintes sont identiques : `d47c98ab8f10169c`. Il mesure du calcul de terrain, pas un gain universel de 20 % sur la durée totale du lancement. Le premier serveur profilé demandait 171 s, puis la première optimisation 132 s. D’autres constructions et tests tournaient pendant ces essais. Le dernier essai sans JFR atteint 89 s : ces trois temps ne prouvent pas à eux seuls une division par deux du chargement. Ils excluent le lancement du client, l’interface de création, le réseau et le rendu graphique. La planification restante prend encore du temps ; ce correctif ne rend pas la création instantanée. ## Vérifications réussies - Référence beta.021 figée dans `StartupDensityReference` : **588 288 comparaisons bit à bit réussies**, champs actuels et legacy27, capacités 5/10/20/100 et graines 0, 42, -7228211907433324401. Colonnes traversant les seuils et coordonnées positives/négatives, modes scalaire et volume. - Mesure CPU alternée dans une même JVM, sur les mêmes 441 colonnes complètes, pour distinguer le gain de calcul des variations de charge de la machine. - `./gradlew check build assemblePack` réussit en **7 min 17 s**, avec les sélecteurs ci-dessous : tous les contrôles purs et **10 tests serveur** réussis. Couverture native : équivalence, mesure CPU, anciennes expéditions, plans aériens, traversées, village et ruines asséchées. - Le correctif testé dans `build/startup-lab` est intégré aux sources principales après contrôle des empreintes avant modification. Les travaux préexistants restent conservés. `build assemblePack -x :sanctuary:check` y réussit en 18 s : cette seconde commande assemble l’intégration et ne remplace pas le `check` réussi dans l’espace isolé. Les classes optimisées du JAR intégré sont identiques octet par octet à celles du serveur testé. - Pas d’essai graphique ni de validation Windows pour ce correctif. Commande de validation complète utilisée : ```sh ./gradlew check build assemblePack \ -PsanctuaryFocusedTests=startup,expeditions,aerial,transit,village,drained \ -PsanctuaryAerial24Tests=true -PsanctuaryTransit29Tests=true ``` Les preuves restent ignorées dans `build/startup-evidence/`, `build/startup-check-build.log` et `build/startup-integrated-build.log`. Le profil initial reste dans `build/startup-baseline-preserved.jfr`. Le mod et le pack prennent ensemble la version beta.022. Aucun tag, canal public ou installation Prism n’est modifié. Export local : [Sanctuary-beta.022.mrpack](../build/Sanctuary-beta.022.mrpack). Intégrité ZIP, dépendances exactes, absence de tests et identité du JAR embarqué vérifiées. Reçu : `build/startup-evidence/artifact.json`. SHA-256 JAR : `53203075916e1f494e5cb73b6a28959170c7f9df26b6edd4746b3531d404f3d1`. SHA-256 MRpack : `97545339b9f7c2465a8248e7fad018e694190ba5acf46aa38c3b40774aa55b56`.