Compare commits
1
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
6c76df7d9f |
@@ -0,0 +1,299 @@
|
||||
# Audit du regroupement de Sanctuary beta.203
|
||||
|
||||
Audit du 4 octobre 2026, demandé avant toute refonte. **Le regroupement est
|
||||
réalisable, mais Sanctuary Test contient maintenant une partie du jeu livré,
|
||||
et JEI constitue un moteur conséquent.** La voie recommandée est de conserver
|
||||
le comportement de la beta.203, absorber Demeure et les fonctionnalités du
|
||||
laboratoire, puis traiter le catalogue comme un chantier distinct.
|
||||
|
||||
Cette livraison contient une sauvegarde et un audit. Aucun regroupement de
|
||||
code, changement de génération, migration de monde ou déploiement n'a été
|
||||
effectué. Les travaux proposés ci-dessous restent à réaliser.
|
||||
|
||||
## État de référence et sauvegarde
|
||||
|
||||
La référence est le commit `454d9a5c08717af807f233759d3a96d639a39d44`, branche
|
||||
`codex/north-fracture-beta203`, dans
|
||||
`/Users/koka/.codex/worktrees/storyquest-beta173/sanctuary-beta`.
|
||||
Son état Git était propre. Les propriétés du mod et du pack déclarent
|
||||
`beta.203`, pour Minecraft 26.3, Java 25, Fabric Loader 0.19.5 et Fabric API
|
||||
0.160.5+26.3.
|
||||
|
||||
Le dossier principal ouvert au début de l'audit était encore sur `main`, en
|
||||
beta.168. La branche 203 possède 40 commits absents de ce `main` local. Cela
|
||||
explique le décalage initial ; le présent audit porte bien sur la 203.
|
||||
|
||||
Sauvegarde locale :
|
||||
`/Users/koka/Documents/sanctuary-backups/beta.203-before-single-mod-20261004-225340/`.
|
||||
|
||||
- Branche de sauvegarde : `codex/snapshot-beta203-before-single-mod-20261004-225340`.
|
||||
- `sanctuary-all-refs.bundle` : historique Git et références commises présentes
|
||||
au moment de la sauvegarde, dont la 203 et le `main` local.
|
||||
- `sanctuary-beta.203-sources.tar.gz` : fichiers suivis de la 203.
|
||||
- `jei-upstream-aae2dfc.tar.gz` : sources amont exactes nécessaires au port JEI ;
|
||||
le patch et le script de préparation sont dans les sources Sanctuary.
|
||||
- `artifacts/` : JAR existants de la 203, JAR de sources, MRpack Test, template
|
||||
graphique et guide. Le JAR Sanctuary contient également JEI et MariaDB.
|
||||
- Reçu de livraison et deux journaux de validation 203 ; empreintes SHA-256
|
||||
dans `manifest.json`, procédure dans `RESTORE.txt`.
|
||||
|
||||
Les 16 fichiers du manifeste ont été contrôlés. Le bundle a été vérifié, puis
|
||||
cloné dans un répertoire neuf : commit attendu retrouvé, copie restaurée
|
||||
propre. Les 4 628 fichiers de l'archive source ont également été comparés
|
||||
octet pour octet à la copie 203 d'origine. Le MRpack sauvegardé a pour SHA-256
|
||||
`ba160b4134c0b9dbe402e1834bdbec4f5561bfd6bd9dc147590dd76ee30dbf4f`, identique
|
||||
au [reçu documenté de la 203](north-fracture-beta203.md).
|
||||
|
||||
**Limite de sauvegarde :** la tentative de copie de la branche vers Gitea a
|
||||
échoué faute d'authentification HTTPS. Aucune sauvegarde distante nouvelle
|
||||
n'est confirmée. Cette sauvegarde locale du projet ne contient pas les mondes,
|
||||
réglages personnels, caches Gradle, essais ignorés ni changements non commis
|
||||
des autres worktrees. Elle ne constitue pas une installation complète hors ligne.
|
||||
|
||||
## Inventaire mesuré
|
||||
|
||||
Comptage des fichiers Java et de leurs lignes physiques, commentaires et
|
||||
lignes vides inclus. Les sources JEI sont celles préparées au commit fixé,
|
||||
dans les six répertoires effectivement compilés par son build.
|
||||
|
||||
| Ensemble | Java livré | Lignes Java | Responsabilité actuelle |
|
||||
| --- | ---: | ---: | --- |
|
||||
| Sanctuary | 963 fichiers | 84 353 | Terrain historique, progression, inventaires, recettes côté serveur, Atlas, communauté, rendu, expansions |
|
||||
| Demeure | 4 fichiers | 347 | Empreintes du vivant, activité et persistance pour l'Atlas |
|
||||
| Sanctuary Test | 105 fichiers | 8 775 | Nouveau terrain, palais et cavernes, ancres, adaptation des expansions, outils de labo |
|
||||
| JEI embarqué | 924 fichiers | 69 104 | Recherche, catalogue, écrans de recettes, favoris, catégories, synchronisation et transferts |
|
||||
|
||||
Sanctuary possède également 381 fichiers Java de tests, soit 60 380 lignes,
|
||||
répartis entre tests purs, GameTests serveur et tests client. Demeure et le
|
||||
module Test ont chacun un fichier de test supplémentaire. Le volume de tests
|
||||
ne prouve pas leur exécution sur chaque livraison.
|
||||
|
||||
Les configurations déclarent 286 mixins Sanctuary, un Demeure, sept Sanctuary
|
||||
Test et sept JEI. Ces injections dans Minecraft rendent l'ordre
|
||||
d'initialisation et les interactions client/serveur sensibles aux déplacements.
|
||||
|
||||
Le graphe de construction comprend quatre sous-projets. Sanctuary embarque
|
||||
Demeure, JEI et MariaDB dans son JAR ; JEI embarque deux bibliothèques d'indexation.
|
||||
Le MRpack 203 contient deux JAR de jeu au premier niveau, Sanctuary et Sanctuary
|
||||
Test, et télécharge Fabric API. L'inspection des archives confirme que les
|
||||
identités Fabric `demeure`, `jei` et `sanctuary_test` existent encore réellement.
|
||||
|
||||
Sources : [settings.gradle](../settings.gradle),
|
||||
[dépendances Sanctuary](../mods/sanctuary/build.gradle),
|
||||
[manifeste Sanctuary](../mods/sanctuary/src/main/resources/fabric.mod.json),
|
||||
[port JEI](../mods/jei/build.gradle).
|
||||
|
||||
## Les points qui rendent une fusion directe dangereuse
|
||||
|
||||
### Sanctuary Test porte le terrain utilisé dans la 203
|
||||
|
||||
Ce module n'est plus seulement un moyen de sauter l'introduction dans un monde
|
||||
plat. Il fournit 46 presets, 44 paramètres de bruit, 93 biomes et 13
|
||||
enregistrements de codecs. Son adaptateur `LabExpansions199` branche le terrain
|
||||
récent sur le journal, les réservations et la file de génération de Sanctuary.
|
||||
|
||||
Il existe deux fichiers différents à l'emplacement
|
||||
`data/sanctuary/worldgen/world_preset/sanctuary.json`. Celui de Sanctuary
|
||||
sélectionne `sanctuary:island_v24`. Celui du module Test sélectionne le terrain
|
||||
natif du laboratoire, avec `sanctuary_test:ascent_1600` et les biomes du labo.
|
||||
Une copie avec écrasement implicite pourrait donc changer le terrain proposé
|
||||
par le bouton Sanctuary. Le tag des presets publics présente aussi une collision.
|
||||
|
||||
Les classes `NorthTerrain200` à `NorthTerrain203`, déjà dans Sanctuary,
|
||||
référencent des biomes `sanctuary_test:*` fournis par l'autre module : la frontière
|
||||
des fonctionnalités ne suit pas celle des sous-projets Gradle.
|
||||
|
||||
**Conséquence :** transférer explicitement le terrain et ses ressources, choisir
|
||||
un seul preset public, conserver les anciennes clés de registre, puis déplacer
|
||||
les outils de mesure vers des sources de développement. Le nom du mod peut
|
||||
disparaître sans renommer immédiatement tous les identifiants de ses ressources.
|
||||
Les numéros historiques ne suffisent pas à identifier du code supprimable.
|
||||
|
||||
Sources : [initialisation du labo](../mods/sanctuary-test/src/main/java/fr/koka/sanctuarytest/WorldgenLab.java),
|
||||
[adaptateur des expansions](../mods/sanctuary-test/src/main/java/fr/koka/sanctuarytest/LabExpansions199.java),
|
||||
[preset livré par le labo](../mods/sanctuary-test/src/main/resources/data/sanctuary/worldgen/world_preset/sanctuary.json),
|
||||
[biomes du Nord 203](../mods/sanctuary/src/main/java/fr/koka/sanctuary/expansion/NorthTerrain203.java).
|
||||
|
||||
### Les raccourcis du labo ne doivent pas devenir les règles ordinaires
|
||||
|
||||
`QuickTestMod` active le pont pour mondes plats et enregistre plusieurs outils
|
||||
de test. Son paquet de configuration peut demander de sauter l'introduction
|
||||
pour les mondes du labo. `QuickTestClient` intervient dans la création de monde.
|
||||
`SkySurvey175` exige même un conteneur Fabric nommé `sanctuary_test`.
|
||||
|
||||
Absorber aveuglément ces points d'entrée étendrait les comportements de labo
|
||||
au mod principal, ou laisserait des outils dépendre d'une identité supprimée.
|
||||
Il faut séparer les services nécessaires au jeu, les options explicites de
|
||||
développement et les tests, puis n'enregistrer chaque événement qu'une fois.
|
||||
|
||||
Sources : [QuickTestMod](../mods/sanctuary-test/src/main/java/fr/koka/sanctuarytest/QuickTestMod.java),
|
||||
[QuickTestClient](../mods/sanctuary-test/src/main/java/fr/koka/sanctuarytest/QuickTestClient.java),
|
||||
[activation du gameplay](../mods/sanctuary/src/main/java/fr/koka/sanctuary/progression/SanctuaryGameplay.java).
|
||||
|
||||
### Demeure est petit mais ses données doivent garder leur adresse
|
||||
|
||||
Seuls deux fichiers Java de production Sanctuary référencent directement
|
||||
son package : l'initialisation et le paquet Atlas. L'absorption est donc
|
||||
relativement simple : service interne, événements, mixin de placement et tests.
|
||||
|
||||
Il faut conserver `data/demeure/footprints-v1.json`, son schéma 1, la graine et
|
||||
les protections contre la corruption ou le remplacement externe. Renommer
|
||||
ce chemin pendant la fusion ferait apparaître un historique vide. Préserver
|
||||
aussi le filtre d'éligibilité fixé par Sanctuary et éviter un double comptage
|
||||
si l'ancien JAR Demeure reste installé.
|
||||
|
||||
Sources : [service Demeure](../mods/demeure/src/main/java/fr/koka/demeure/DemeureService.java),
|
||||
[écriture atomique](../mods/demeure/src/main/java/fr/koka/demeure/AtomicJson.java).
|
||||
|
||||
### JEI est le principal choix de conception
|
||||
|
||||
Sanctuary ne référence directement les classes JEI que dans deux fichiers
|
||||
de production, `RecipeClient` et `SanctuaryJeiPlugin`. Cette frontière limitée
|
||||
est favorable à un remplacement. Elle masque toutefois un moteur de 924
|
||||
fichiers Java, avec un patch local de 1 491 lignes touchant 41 fichiers.
|
||||
|
||||
JEI fournit aussi des services serveur : transferts d'ingrédients,
|
||||
sérialiseurs et synchronisation des recettes. Son démarrage dépend des points
|
||||
d'entrée Fabric, de mixins, d'un access widener et de services Java. Effacer
|
||||
son manifeste ne constitue donc pas une intégration fonctionnelle.
|
||||
|
||||
Deux trajectoires sont possibles :
|
||||
|
||||
- **Internaliser le moteur dérivé de JEI.** Faire disparaître le mod distinct,
|
||||
adapter son démarrage et conserver ses comportements. Risque fonctionnel
|
||||
plus limité, mais environ 69 000 lignes tierces restent à maintenir, avec
|
||||
leurs crédits, licences, ressources et conventions.
|
||||
- **Construire le catalogue Sanctuary.** Remplacer progressivement le moteur
|
||||
derrière une interface interne. C'est le meilleur moyen de réduire la
|
||||
dépendance à JEI, avec davantage de développement et de validation.
|
||||
|
||||
La seconde trajectoire doit couvrir la recherche, recettes/usages, favoris,
|
||||
historique, fluides, cuisson, alchimie et autres catégories réellement utilisées,
|
||||
les recettes de datapacks, les interfaces de conteneurs et les transferts avec
|
||||
inventaire étendu. Les règles d'apprentissage, recettes cachées, découvertes et
|
||||
révocation opérateur restent gouvernées par les services serveur Sanctuary.
|
||||
L'interface native seule ne suffit pas à remplacer ce contrat.
|
||||
|
||||
Sources : [RecipeClient](../mods/sanctuary/src/main/java/fr/koka/sanctuary/client/RecipeClient.java),
|
||||
[pont JEI](../mods/sanctuary/src/main/java/fr/koka/sanctuary/client/SanctuaryJeiPlugin.java),
|
||||
[contrat des recettes](recipes-jei-beta024.md),
|
||||
[provenance JEI](../mods/jei/PROVENANCE.md).
|
||||
|
||||
### Le build et la distribution imposent encore plusieurs mods
|
||||
|
||||
`scripts/pack.py` exige explicitement les JAR imbriqués Demeure et JEI,
|
||||
leurs versions, licences et empreintes. `scripts/test_pack.py` exige un JAR
|
||||
`sanctuary_test`. Les scripts de lancement dépendent de ses tâches Gradle
|
||||
et de ses presets. Tous ces contrats devront évoluer dans les mêmes tickets
|
||||
que les modules concernés, en gardant les vérifications d'intégrité.
|
||||
|
||||
Un seul mod de jeu Sanctuary peut continuer à utiliser Fabric Loader,
|
||||
Fabric API et des bibliothèques techniques. L'exigence plus stricte « aucune
|
||||
autre entrée Fabric, même technique » serait un périmètre différent : Fabric
|
||||
API et certaines bibliothèques imbriquées possèdent elles-mêmes des métadonnées.
|
||||
Elle n'est pas nécessaire pour réunir les fonctionnalités demandées.
|
||||
|
||||
Sources : [assemblage du pack](../scripts/pack.py),
|
||||
[assemblage Test](../scripts/test_pack.py),
|
||||
[lancement du terrain](../scripts/worldgen_lab.py).
|
||||
|
||||
## Nettoyage utile du dépôt
|
||||
|
||||
Le découpage interne de Sanctuary existe déjà : progression, inventaire,
|
||||
recettes, communauté, rendu, monde, expansions, etc. Le conserver évite qu'un
|
||||
mod unique devienne une classe unique. Le terrain représente à lui seul
|
||||
35 599 lignes Java dans Sanctuary, avec des générations historiques enregistrées.
|
||||
|
||||
Les premiers gains seraient de clarifier la référence de développement,
|
||||
d'extraire les paramètres et tâches répétitifs du `build.gradle` Sanctuary
|
||||
(1 355 lignes), et de transformer le README de 2 881 lignes en porte d'entrée
|
||||
vers un historique séparé. Certains passages annoncent toujours beta.166 et
|
||||
le README Demeure indique encore 26.3-pre-2 ; les propriétés de build et le
|
||||
ticket 203 sont les références utilisées ici.
|
||||
|
||||
Il y avait 48 worktrees avant celui de cet audit. Ce nombre augmente le risque
|
||||
de travailler sur une ancienne version, comme l'a montré le décalage 168/203.
|
||||
Les archiver demandera de distinguer les branches terminées des travaux encore
|
||||
actifs. Aucun de ces worktrees n'a été supprimé par cet audit. Les gros dossiers
|
||||
`build/` ignorés ne sont pas assimilés à des sources mortes à effacer.
|
||||
|
||||
## Découpage proposé en tickets vérifiables
|
||||
|
||||
| Ticket proposé | Résultat attendu | Vérification déterminante |
|
||||
| --- | --- | --- |
|
||||
| UNI 01 Référence et contrats | Branche issue de 203, inventaire des clés persistantes, fonctions de catalogue et ressources en collision | Reconstruction depuis la sauvegarde, référence de tests documentée, exemplaires de mondes de développement |
|
||||
| UNI 02 Demeure interne | Plus de mod Demeure séparé ; empreintes et Atlas inchangés | Comptage unique des événements, relecture du fichier schéma 1, refus de corruption |
|
||||
| UNI 03 Terrain dans Sanctuary | Terrain 203, Nord, palais et relais disponibles avec Sanctuary seul | Création Small/Medium/Large, graines 0/42/4736390610738281858, reprise d'expansion et rechargement |
|
||||
| UNI 04 Outils de développement séparés | Plus de mod Sanctuary Test ; tâches de labo explicites et sources de test | Parcours normal sans raccourcis d'introduction, parcours labo opt-in, serveur dédié et client Vulkan |
|
||||
| UNI 05 Catalogue interne | Interface indépendante de JEI, puis internalisation ou remplacement selon le périmètre retenu | Recherche, usages, favoris, filtres de découverte et transferts réels en solo et à deux |
|
||||
| UNI 06 Distribution et documentation | Un artefact de jeu Sanctuary, installation existante débarrassée des anciens JAR, documentation actuelle | `check build`, `assemblePack`, contenu des archives et essai d'installation isolé |
|
||||
|
||||
Chaque ticket reçoit une branche `codex/<sujet>`. Les livraisons binaires
|
||||
incrémentent la prochaine version disponible ; cet audit documentaire reste
|
||||
sur beta.203. Les étapes peuvent être rapprochées, mais chacune doit laisser
|
||||
un résultat vérifiable avant la suivante.
|
||||
|
||||
Pour les mondes existants, établir d'abord un contrat de compatibilité : garder
|
||||
les codecs et noms `sanctuary:*` et `sanctuary_test:*`, les schémas et chemins,
|
||||
notamment `sanctuary-lab-expansions<révision>`. Vérifier sur des copies de
|
||||
développement les constructions, progression, recettes, empreintes et expansions
|
||||
en attente. Un changement de nom public ou de package Java ne justifie pas
|
||||
une régénération de chunks. Aucun essai sur un monde personnel n'est requis
|
||||
pour commencer ces tickets.
|
||||
|
||||
## Difficulté estimée
|
||||
|
||||
Estimation de travail concentré pour une personne connaissant le dépôt,
|
||||
incluant vérification et corrections ; ce ne sont pas des durées mesurées.
|
||||
|
||||
| Périmètre | Ordre de grandeur | Incertitude principale |
|
||||
| --- | --- | --- |
|
||||
| Demeure absorbé | 0,5 à 1 jour | Persistance et absence de double enregistrement |
|
||||
| Terrain et fonctions Test absorbés, outils séparés | 3 à 5 jours | Anciennes clés, ressources en collision, chargement et reprise |
|
||||
| JEI internalisé avec son moteur conservé | 2 à 4 jours | Initialisation, services, ressources et transferts |
|
||||
| Catalogue propre remplaçant les usages actuels de JEI | 10 à 20 jours | Étendue exacte des catégories, confort d'usage et parité multijoueur |
|
||||
|
||||
Avec la remise au propre du build et de la distribution, compter **environ
|
||||
une à deux semaines pour une unification conservatrice**, et **trois à cinq
|
||||
semaines pour un ensemble nettoyé avec remplacement du catalogue**. Une
|
||||
équivalence avec toutes les intégrations tierces possibles de JEI dépasserait
|
||||
ce périmètre. La phase UNI 01 doit resserrer ces estimations.
|
||||
|
||||
Ma recommandation est d'absorber Demeure puis le terrain Test, en conservant
|
||||
les formats, et d'encapsuler immédiatement le catalogue avant de le remplacer.
|
||||
Renommer tous les identifiants et réécrire la génération dans cette même passe
|
||||
augmenterait le risque sans être nécessaire à l'objectif d'un mod unique.
|
||||
|
||||
## Vérifications et limites de cet audit
|
||||
|
||||
Sauvegarde et restauration vérifiées, archives existantes inspectées, graphe de
|
||||
dépendances et ressources en collision contrôlés. La copie d'audit possède sa
|
||||
branche `codex/audit-single-mod-beta203`, distincte des branches de jeu.
|
||||
|
||||
Une exécution ciblée a été réalisée dans cette copie isolée :
|
||||
|
||||
```sh
|
||||
./gradlew --no-daemon check build \
|
||||
-PsanctuaryFocusedTests=demeure,recipes,operator,realtime \
|
||||
-PsanctuaryAtlasOnly=true
|
||||
```
|
||||
|
||||
**Résultat : BUILD SUCCESSFUL en 2 min 57 s ; 140 tâches, dont 139 exécutées,
|
||||
et 15/15 GameTests requis réussis.** Les tests numériques rattachés à `check`,
|
||||
la compilation des quatre modules, les contrôles du manifeste pack et des
|
||||
ressources ont également passé. Journal : `build/audit-beta203-check-build.log`.
|
||||
Le cache des sources JEI a été copié depuis le worktree 203, puis contrôlé
|
||||
par le script de préparation ; ce n'est pas une reconstruction sans caches.
|
||||
L'assemblage des packs n'a pas été relancé dans cet audit : les archives
|
||||
203 existantes ont été inspectées et sauvegardées.
|
||||
|
||||
La [livraison 203](north-fracture-beta203.md) documente sept GameTests ciblés,
|
||||
les tests numériques et un essai natif North Small/42. La suite historique
|
||||
complète n'est plus validée depuis la [limite décrite en 200](north-expansion-beta200.md),
|
||||
où une exécution a été interrompue pendant la préparation d'un test hydrologique.
|
||||
Cet arrêt ne démontre pas un interblocage. Les succès antérieurs sur 265 tests
|
||||
ne constituent pas une validation de la 203.
|
||||
|
||||
Cet audit n'est pas un test visuel, un essai Windows, une validation des
|
||||
performances ou une preuve de migration des sauvegardes. Aucun client graphique
|
||||
n'a été lancé ; les futures validations graphiques ciblent uniquement Vulkan.
|
||||
Reference in New Issue
Block a user