WORLDWEAVER 1.2.1 — SECONDE PASSE DE CORRECTION, 08/10/2026

Cette passe complète l'audit 1.2. Les sources de la version précédente ont été
conservées avant modification. Sur 25 nouveaux scénarios exécutés séparément sur
1.2, 12 ont reproduit un défaut ; 13 contrôles passaient déjà. Trois autres cas
ont ensuite été ajoutés : 28 nouveaux scénarios au total, tous réussis sur 1.2.1.

DÉFAUTS REPRODUITS ET CORRIGÉS
1/2. Élevé : collisions de casse dans les dossiers implicites et explicites des
ZIP (world/data/a et world/DATA/b). Les fichiers finaux n'avaient pas le même
chemin complet, donc l'ancien contrôle les acceptait. Un registre de chaque
préfixe détecte désormais les alias de dossier et conflits fichier/dossier.
Ce registre est partagé par extraction, analyse des sources et sortie.
3. Élevé : sélection d'une dimension dont le donneur avait WorldGenSettings,
alors que la base n'en avait pas => générateur non repris silencieusement.
Les organisations incompatibles sont maintenant refusées. Une source ancienne
sans ce champ reste utilisable lorsque ses propres dimensions sont conservées.
4/5. Élevé : définitions de générateurs classiques ou modernes acceptées même
avec un type NBT incorrect. Les définitions choisies doivent être des compounds.
6. Moyen : DataVersion du level.dat Paper séparé pouvait être un float dont
la valeur était convertie en entier. Exigence d'un tag entier exact désormais.
7. Élevé : un profil complet plus récent que son monde était accepté, malgré
l'absence de conversion inverse. Refus explicite dans tous les modes concernés.
8. Moyen : disparition d'une dimension vide non détectée par l'index de fichiers.
Les dossiers des dimensions reconnues sont vérifiés avant chaque prévalidation.
9. Faible : usercache.json en UTF-8 invalide bloquait toute l'analyse, alors que
les UUID/profils étaient valides. Ce cache facultatif est ignoré dans ce cas.
10. Élevé : un fichier modifié pendant sa copie puis restauré avant le contrôle
final pouvait contaminer l'archive. Le SHA-256 est désormais calculé sur les
octets copiés et comparé à l'empreinte initiale. Couverture : .dat par défaut,
tous les fichiers en mode sha256. Le test reproduit une mutation temporaire
de région de 4 Mio, puis restaure son contenu et sa date d'origine.
11. Moyen : level.dat des sorties Paper conservait le nom du monde d'origine.
Le nom suit désormais le dossier final (_nether / _the_end), dans des documents
séparés ; les objets du cache de préparation ne sont plus modifiés à cet effet.
12. Moyen : ZipInputStream considérait certains fichiers non ZIP comme une
archive vide. Une vérification bornée de la fin du conteneur est faite avant
extraction, sans charger un index central massif en mémoire. ZIP tronqués et
multipart refusés ; les vrais ZIP vides restent valides.

RENFORCEMENTS ET CONTRÔLES AJOUTÉS
Profondeur ZIP <=128, chemin <=4096 caractères ; refus explicite des dossiers
construits sous un fichier ; refus d'une archive amputée de sa fin.
Projets après déplacement d'une source, contenus identiques ambiguës, fichier
de projet trop grand, noms réservés Windows, état ancien de combat du dragon
et formats sans WorldGenSettings contrôlés par les nouveaux scénarios.
La documentation corrige la fermeture : attendre/annuler avant de fermer.

RÉSULTATS LOCAUX EXÉCUTÉS SUR LE CODE CORRIGÉ
176 AuditTest + 28 BugAuditTest : 204 scénarios indépendants, chacun dans son
propre processus Java. Tous PASS.
69 vérifications historiques MergeEngineTest : toutes PASS.
12 scénarios GuiAuditTest + 2 GuiAsyncAuditTest : tous PASS.
PerformanceTest : 2000 profils supplémentaires, plafond Java 128 Mio : PASS.
Le script test.ps1 -Gui enregistre 220 exécutions (la suite historique compte
comme une exécution contenant 69 vérifications). Aucun échec.
Résultats détaillés et preuves avant correction dans test-results.

LIMITES
Données synthétiques et régions avec marqueurs, pas de serveur Minecraft réel
ouvert. Les définitions sont vérifiées structurellement, pas évaluées par tous
les mods/datapacks possibles. Le contrôle ZIP vérifie la fin du conteneur et
les entrées extraites, pas toutes les extensions ZIP exotiques.
Java 17 ciblé ; tests Windows sur Zulu 26.0.2.1.
Les limites fonctionnelles restent : pas de fusion de chunks, pas de remappage
de cartes, pas de fusion de plugins, pas de conversion de versions. Prévoir
un test sur une copie de vrai serveur. Voir AUDIT-1.2.txt pour les autres limites.

VALIDATION SUR LE VÉRITABLE VPS DEBIAN
Debian GNU/Linux 12 (bookworm), Temurin 25.0.4.1. Aucun paquet installé, aucun
serveur Minecraft arrêté ou modifié. Tests dans un dossier utilisateur séparé.
sh test.sh : 176 + 28 scénarios individuels, 69 vérifications historiques et
charge sous 128 Mio, tous réussis. 206 exécutions, 0 échec dans le bilan TSV.
Charge finale locale Linux : 10,01 secondes, mesure indicative.
12 processus du JAR distribué sur Debian : tous réussis, codes 0/1/2 vérifiés,
avec export/rechargement de projet, source inversée, refus d'écrasement et SHA-256.
Les fichiers debian-results.tsv et debian-packaged-jar.txt sont dans test-results.
Les tests graphiques restent exécutés sous Windows ; pas de vrai serveur
Minecraft lancé, ni validation sur toutes les versions de Java et distributions.
