# CYCLE-01 · PROG-03 · FACTION-01 · NGP-01 — beta.011 Contrat commun établi avant l'évolution des sauvegardes. Branche : `codex/factions-new-game-plus`. Minecraft reste **26.3-pre-2**. > Historique beta.011. Depuis [beta.038](graves-food-beta038.md), la fondation > coûte 10 niveaux et crée une seule place, sans prestige ; les charges servent > aux places supplémentaires. Les anciennes fondations restent inchangées. ## Règles de cette livraison Un cycle est personnel. Le premier porte le numéro 1. Seul un habitant vivant ayant les **six compétences au maximum** peut confirmer son New Game+. Les aptitudes ne conditionnent pas ce passage. Une mort ordinaire ne termine jamais un cycle et ne distribue aucune récompense de prestige. Valeurs initiales de `config/sanctuary/cycle-factions.json` : chaque passage accorde **1 prestige et 1 charge personnelle**. Créer une faction coûte **1 charge**, donne **2 places**, fondateur compris. Chaque membre peut payer **1 charge pour ajouter 1 place**. Le plafond de cette première version est 100 membres. Le prestige compte les cycles achevés ; ce n'est pas une monnaie. Les charges inutilisées appartiennent à l'habitant. Les places financées appartiennent à la faction et restent après un départ ou un New Game+. Aucun remboursement lors d'une dissolution. Les règles monétaires sont configurables au redémarrage, mais ne recalculent jamais les anciens événements. Une personne appartient à une seule faction à la fois. Le propriétaire invite, révoque les invitations, exclut, transmet la responsabilité et dissout. Les invitations durent 7 jours réels ; elles ne réservent pas de place. L'acceptation revalide place, invitation et absence d'autre faction. Les membres peuvent partir ; le propriétaire doit transmettre ou dissoudre. Son absence ne transfère pas automatiquement la propriété. Le changement de propriétaire annule les invitations en cours. La couleur de faction est copiée de celle du fondateur à sa création ; la couleur personnelle reste indépendante. Les factions n'accordent encore ni claims ni protection de blocs. ## Matrice du New Game+ | Donnée | Traitement | | --- | --- | | Six compétences | Rang zéro : 3 cœurs, 3 nourritures, 3 bulles, gestes individuels, 9 cases | | XP non dépensée | Remise à zéro par défaut ; option serveur `keepXp` | | Identité, UUID, pseudo enregistré, bio, couleur | Conservés | | Aptitudes et preuves de leurs achats | Conservées | | Achats du cycle terminé | Archivés intégralement, coûts et dates compris | | Objets, équipement, main secondaire, coffre de l'Ender | Conservés, sans déplacement | | Rangées d'inventaire redevenues verrouillées | Occupées et visibles en récupération : retrait autorisé, nouveau dépôt interdit | | Recettes, découvertes, Atlas personnel, statistiques et advancements | Conservés | | Demeure, faction, rôle, invitations encore valides | Conservés | | Prestige et charges personnelles | Conservés, puis récompense du cycle ajoutée une seule fois | | Monde, constructions, coordonnées du joueur | Conservés ; aucune régénération ou téléportation | | Santé, faim, air courants | Bornés aux nouvelles capacités, sans soin gratuit | | Argent, coffre-fort, favoris, mémoire Web | Systèmes futurs ; ce ticket ne crée ni ne migre de données fictives | Exemple : Alice termine son premier cycle, obtient prestige 1 / charge 1 et fonde une faction de deux places. Bob la rejoint sans payer. Son propre premier New Game+ lui donne une charge : il l'investit et la faction passe à trois places. Au deuxième New Game+ d'Alice, son prestige devient 2 ; sa nouvelle charge reste personnelle et son rôle de propriétaire demeure. Ses 54 cases pleines ne sont ni effacées ni jetées : les 45 cases désormais verrouillées restent retirables jusqu'à leur prochain déblocage. ## Contrat de migration et reprise L'adoption des progressions beta.003–010 est additive : schémas 1–5 vers **schéma 6**, avec `cycle: 0` (zéro cycle terminé). Aucun achat n'est perdu. La révision réseau vaut `cycle * 64 + nombre d'achats actifs`, empêchant qu'un ancien clic d'achat soit accepté après remise à zéro. Les identifiants existants restent stables. La capacité de configuration `sanctuary:cycle_factions_v1` exige la mise à jour des deux côtés avant de rejoindre. Le nouveau fichier `data/sanctuary-cycle-factions.json` est un journal de monde versionné (schéma 1), lié à la graine, contenant UUID de monde et événements datés identifiables. Il reconstruit soldes, factions et fins de cycle. Chaque mutation est validée sur une copie, écrite par remplacement atomique puis publiée en mémoire. Une erreur ou un fichier modifié extérieurement bloque les mutations ; aucune remise à zéro silencieuse. Un New Game+ écrit **d'abord** sa fin de cycle et sa récompense dans ce journal, puis applique la nouvelle progression au joueur. Au prochain chargement, si le journal a un cycle d'avance, sa décision est rejouée sur le joueur (avec sa politique XP enregistrée). Si les numéros concordent, rien n'est réinitialisé. Un joueur en avance sur le journal, ou en retard de plus d’un cycle, est refusé, ce qui détecte une restauration partielle incompatible. Le délai entre clics utilise une horloge monotone réelle (250 ms), indépendante des ticks suspendus dans le menu pause solo. Lire une page ne consomme pas le délai réservé à une mutation. Le solde d’XP est envoyé explicitement avec la progression pour rester exact pendant cette pause. Les tentatives répétées d'un même cycle ne donnent pas de charge supplémentaire. La sauvegarde vanilla conserve les objets et la progression dans le même fichier joueur, comme en beta.010. Les acquisitions d’objets entre deux sauvegardes restent soumises à l’autosauvegarde Minecraft : ce journal ne remplace pas la sauvegarde générale du monde. Faire une copie complète du monde arrêté avant adoption ; restaurer ensemble le journal, les fichiers des joueurs et les autres données du monde. Le retour aux anciens binaires après adoption n'est pas supporté. Ce contrat autorise l'évolution du code de lecture/écriture ; aucun monde personnel n'est modifié par les travaux de développement. ## Livraison et vérifications Les contrôles du contrat pur passent : reprise beta.010, cinq/six compétences, conservation des aptitudes, deux cycles successifs, double requête, dépenses, propriétaire absent, invitations concurrentes, expiration exacte à sept jours, transmission, dissolution, relecture du journal et refus d'une écriture après corruption ou modification externe. Les sept scénarios natifs propres à beta.011 passent (8/8 avec l'admission Fabric), puis la suite progression/carte/Demeure/minage/construction/inventaire/ cycles passe à **45/45**. Ils couvrent notamment : - Inventaire réellement rempli de 54 piles avant passage ; récupération dans le menu natif, équipement et coffre de l'Ender conservés. - Retour à 3/3/3 sans soin offert, XP zéro, nouvel achat possible et ancien paquet d'achat refusé grâce à la révision de cycle. - Identité, statistiques, observations Atlas et influence Demeure conservées. - Décision de fin écrite puis relecture d'un ancien fichier joueur ; après une seconde sauvegarde, l'XP et les achats du nouveau cycle ne sont plus remis à zéro. L'option de conservation XP est prise dans la décision enregistrée. - Mort ordinaire après New Game+ : même progression, prestige et faction. - Création, invitations par pseudo/UUID, contribution d'un membre, changement de responsable, conteneurs ouverts et mode spectateur refusés. Le test de reprise a d'abord détecté un problème de fixture : chaque joueur simulé possède un nouveau profil d'authentification, que Minecraft rétablit au chargement. La fixture de reconnexion utilise maintenant le même UUID. Le parcours client natif `Cycle011ClientChecks` est compilé : ouvert depuis le menu pause, cycle verrouillé, aperçu/annulation, passage confirmé, création et journal, à deux échelles GUI. **Il n'a pas été exécuté graphiquement : le Mac est verrouillé. Aucun rendu beta.011 n'est déclaré vérifié.** La commande de livraison est : ```sh JAVA_HOME=/Users/koka/Library/Java/JavaVirtualMachines/temurin-25.jdk/Contents/Home \ ./gradlew check build assemblePack \ -PsanctuaryFocusedTests=progression,map,demeure,mining,building,inventory,cycle ``` Les logs restent ignorés dans `build/cycle011-delivery-final.log`, `build/cycle011-smoke.log` et `build/cycle011-client-final-compile.log`. La commande finale réussit en **3 min 55 s**, avec les 45 tests natifs et les contrôles purs. Le reçu `build/cycle011-artifact.json` confirme l'intégrité ZIP, l'identité des JAR compilés et embarqués, les versions beta.011, les 87 libellés FR/EN des cycles, les dépendances exactes et les assets conservés. Les exports beta.003–010 gardent leurs empreintes précédentes. Artefact local : `build/Sanctuary-beta.011.mrpack` — 2 479 614 octets. SHA-256 : `dae0d1fbd8f410fd73b2d3053ef0f17539e24639c3d338ce84dbfca6e4f43ec0`. L'export local ne publie pas le canal packwiz et ne modifie aucune instance Prism. ## Essai en jeu Installer la même beta.011 côté client et serveur. Dans un monde de test, `/experience add @s 1000 levels` permet à un opérateur de tester les achats sans attendre. Acheter les quarante rangs des six compétences dans le Blocodex, puis ouvrir **Progression → Cycle**. Acheter les aptitudes reste facultatif. Remplir aussi les dernières rangées avant de confirmer pour vérifier leur récupération. Un second joueur peut rejoindre la faction via son invitation sans avoir lui-même fait de New Game+. Les invitations et les actions de faction se trouvent dans **Monde → Factions**, l'historique dans **Monde → Journal des cycles et factions**. Les montants s'éditent dans `config/sanctuary/cycle-factions.json`, serveur arrêté : `reward`, `creationCost`, `initialCapacity`, `expansionCost`, `maxMembers`, `keepXp`. Le prestige reste toujours le nombre de cycles terminés. Le journal est borné à 100 000 événements / 16 Mio ; il refuse d'effacer les anciennes archives pour faire de la place. Une future rotation nécessitera son propre contrat. Le journal fournit une ontologie locale (`sanctuary:cycle_completed`, `sanctuary:faction_*`) ; aucune connexion au site ni distribution de droits opérateur n'est incluse.