Le modèle d’exécution
Deux règles gouvernent l’exécution partout, à l’auberge comme au Consulat.
Tout est accepté jusqu’au tour
Une demande bien formée est toujours acceptée. L’interface accuse réception, empile la demande, et s’arrête là : 202 Accepted. Elle ne vérifie ni l’existence, ni la disponibilité, ni la capacité, ni la cohérence de quoi que ce soit.
Le refus n’existe qu’à l’exécution, pendant le tour, pour une règle d’affaires, et il est consigné avec un motif.
Conséquence à assumer : le code de réponse ne dit rien du sort de la demande.
Un échec n’interrompt jamais le tour
Quand une action de la pile échoue, elle est la seule à échouer. L’action suivante s’exécute comme si de rien n’était, et les conséquences du tour se produisent quand même.
Il n’y a aucune transaction englobante et aucun retour en arrière.
Une nuit dont la moitié des actions ont échoué est une nuit ordinaire : elle va jusqu’au bout et scelle son journal comme les autres.
Première partie — L’auberge
L’aubergiste
L’aubergiste tient l’établissement, qu’il a hérité d’un ancêtre signataire du Traité. C’est lui qui aménage les chambres, commande les denrées, enregistre les réservations, embauche le personnel et permet aux voyageurs de dormir paisiblement.
Les chambres
Une chambre porte un numéro, un nombre de places et un triplet d’exigences : atmosphère, gravité, température.
Aménager une chambre, c’est fixer ces valeurs. L’auberge démarre sans aucune chambre : c’est l’aubergiste qui les crée, qui en choisit les numéros, et qui peut les reconfigurer plus tard.
Une chambre convient ou non à un voyageur, selon que ses exigences s’accordent à celles de son espèce. Plusieurs voyageurs peuvent partager une chambre qui leur convient à tous.
Les séjours
Un séjour est ce qui lie un voyageur à l’auberge : un forfait, un nombre de nuits, et une chambre attribuée à l’arrivée.
Il existe trois forfaits : Royal, Confort et Modeste. Le forfait n’achète pas seulement le confort : il achète aussi la priorité au repas, car les vivres ne suffisent pas toujours.
Une nuitée est le prix d’une nuit de séjour. Le registre de l’auberge tient le compte de ce qui a été facturé.
Un séjour peut recevoir des commodités. Elles se souscrivent une à une et s’empilent. Chacune modifie le besoin alimentaire, le tarif, ou les deux.
Le garde-manger
Le garde-manger conserve des portions, réparties en trois files selon la denrée : végétale, carnée ou minérale.
Chaque portion se souvient de la nuit où elle a été livrée. Passé un délai propre à sa denrée, elle est périmée et retirée.
Les réserves ne sont pas extensibles non plus : chaque file a une contenance maximale.
On approvisionne le garde-manger par commande ponctuelle, avec un délai de livraison, ou par abonnement, qui livre une quantité fixe toutes les quelques nuits jusqu’à sa résiliation.
Le repas du soir
Chaque nuit, chaque voyageur a un besoin quotidien en portions, calculé à partir de sa masse. Son régime décide dans quelle file, ou dans lesquelles, il le prélève.
Le personnel de quart
L’auberge emploie des employés. Chaque nuit, ils se répartissent seuls entre trois postes — cuisine, fraîcheur, ménage — à raison d’au plus un chacun. Personne ne choisit lequel, et aucune interface ne permet d’affecter qui que ce soit. L’aubergiste n’a qu’un mot à dire sur son personnel : la consigne du soir, qui accompagne le passage de la nuit.
L’espèce d’un employé décide de ce qu’il peut faire : ce qu’il peut cuisiner et combien de temps il tient devant chaque réserve, d’où la capacité de service propre à chaque file ; quelles réserves il peut tenir en commis fraîcheur ; quelles chambres il peut faire. Un employé qui travaille trop de nuits d’affilée est épuisé et doit chômer.
La nuit
C’est le cœur du système, et sa seule horloge.
L’auberge n’a pas de montre, et le Carrefour n’a pas de jour. Rien ne se produit tant que l’aubergiste ne fait pas passer une nuit. Aucun réveil, aucune minuterie, aucune date réelle : le temps du monde est un compteur de nuits, et il n’avance que sur commande.
⚠️ Les mois et les années qui apparaissent dans les stories sont du décor. Les personnages parlent dans le calendrier de leur dimension d’origine ; le système, lui, ne connaît que le numéro de la nuit courante. Aucune conversion n’existe, aucune n’est à écrire, et rien ne doit jamais être déduit d’une durée exprimée autrement qu’en nuits.
Une nuit se déroule en deux temps.
-
D’abord les actions. Toutes les demandes reçues depuis la nuit précédente ont été accumulées. Elles s’exécutent maintenant, en ordre d’arrivée. C’est à cet instant seulement qu’une réservation peut être refusée, qu’une embauche peut être rejetée, qu’une commande prend forme.
-
Ensuite les conséquences. Elles se produisent toujours dans le même ordre imposé inscrit dans les stories.
⚠️ Cet ordre n’est pas un détail d’implémentation. C’est la règle d’affaires. Une conséquence placée avant une autre donne un résultat différent, et c’est voulu.
⚠️ Ce qu’une conséquence arrête, les suivantes ne le rouvrent pas. Une décision prise tôt dans la nuit tient jusqu’au matin, quoi qu’il arrive ensuite.
Les libérations de place
Une place se libère au moment précis où ce qui la libère s’exécute. Ce qui vient après dans le tour peut la prendre ; ce qui est déjà passé, non.
| Ce qui libère la place | À quel moment du tour | Qui peut la prendre |
|---|---|---|
| un départ | à l’étape des départs, après toutes les actions | personne ce soir : plus aucune action ne suit. La place est utilisable à partir de la nuit suivante |
| un déménagement pendant les actions | au milieu de la pile | l’action suivante de la même nuit |
| un déménagement pendant une conséquence | à l’étape que la story désigne | ce qui suit dans cette étape, et les étapes suivantes |
Il n’y a donc pas trois règles mais une seule. Le départ n’est pas une exception : c’est simplement ce qui se libère le plus tard, à un moment où il ne reste plus rien pour en profiter.
Deuxième partie — Le Consulat des passages
Ce qu’il fait
Personne ne reste au Carrefour. Tout voyageur finit par rentrer, et c’est le Consulat des passages qui l’organise.
Le Consulat est une administration. Il n’héberge personne, ne nourrit personne, n’a aucune autorité sur l’auberge et ne lui adresse jamais la parole.
L’audience
Le Consulat siège en audiences. C’est son propre tour, et il fonctionne comme la nuit : des actions accumulées, exécutées en ordre d’arrivée, puis des conséquences dans un ordre imposé.
⚠️ L’audience et la nuit sont indépendantes. Sept nuits peuvent passer entre deux audiences ; deux audiences peuvent se tenir sans qu’aucune nuit ne survienne. Le Consulat n’a aucun moyen d’interroger l’auberge : ce qu’il sait des nuits, il le tient des journaux qu’on lui porte, et rien de ce qu’il compte ne se mesure en nuits.
Les dimensions et leurs règles d’entrée
Pour le Consulat, les six dimensions ne sont pas des mondes : ce sont des destinations, et rien d’autre.
Chaque dimension dépose ses règles d’entrée : ce qu’elle accepte de reprendre, et à quel prix. Le Consulat les applique ; il ne les fixe jamais.
Le dossier de passage
Le Consulat ouvre un dossier de passage à chaque venue d’un voyageur dont il apprend l’arrivée. Le dossier suit son état.
Les droits consulaires
Le Consulat perçoit des droits consulaires sur chaque passage. Il tient son propre registre, séparé de celui de l’auberge.
Un voyageur qui n’obtient pas son passage attend la prochaine audience. Rien ne le retient au guichet, et le Consulat n’a aucun moyen de savoir où il dort en attendant.
Troisième partie — Le journal, et la frontière
L’auberge et le Consulat sont deux systèmes distincts. Ils ne partagent aucune donnée, aucun objet, aucune horloge. Le quatrième article du Traité règle leurs échanges, et il n’en prévoit qu’un seul.
À la fin de chaque nuit, l’auberge scelle un journal, c’est-à-dire la liste des faits survenus pendant la nuit : tel voyageur a été admis, tel autre est parti, et pour quel motif. Une fois scellé, un journal ne change plus jamais.
Elle le transmet aussitôt au Consulat, par un appel sortant et unique : POST /night-logs. C’est l’unique point de contact entre les deux systèmes. L’auberge dépose son journal et passe à autre chose : elle n’attend rien, ne lit pas la réponse, et ne renvoie jamais un journal qu’elle a déjà transmis.
Le Consulat empile ce qu’il reçoit et n’y touche pas. Puis, à son rythme, il dépouille les journaux qu’il n’a pas encore lus et met ses dossiers à jour. Recevoir n’est pas dépouiller : le Consulat peut avoir vingt journaux en attente et n’en lire aucun avant sa prochaine audience.
Concrètement :
- l’auberge connaît une seule route du Consulat, en écriture, et ne lit jamais son état ni le corps de sa réponse ;
- le Consulat n’interroge jamais l’auberge, même quand il aurait de bonnes raisons de le faire ;
- aucun quota, aucun dossier, aucun droit consulaire n’a le moindre effet sur une nuit d’auberge.
⚠️ Conséquence à accepter : les deux registres peuvent diverger, et le système n’a aucun moyen de les réconcilier. Un fait qui arrive trop tard, sur un dossier que le Consulat a déjà clos, ne fait rien. Le Consulat passe au fait suivant et son registre reste inchangé. Il ne corrige pas, il ne signale pas, et il ne garde aucune trace de ce fait.
Ce n’est pas une faille à réparer, et il n’y a aucun mécanisme de rattrapage à construire. C’est le comportement attendu, et il sera testé.
Les départages
Les règles ci dessous valent partout et dans les deux systèmes.
Le numéro d’existence
C’est une chaîne opaque. Le système n’y suppose aucun format. EX-01, EX-4417-Q et ZZ sont trois numéros parfaitement valides.
« Numéro d’existence croissant » veut donc dire ordre ordinal sur la chaîne, caractère par caractère, par point de code Unicode. C’est String.compareTo en Java, < en JavaScript.
Ce n’est pas un tri numérique. Donc EX-100 < EX-99.
Le nom
Se compare caractère par caractère, par point de code Unicode. C’est String.compareTo en Java, < en JavaScript.
Les arrondis des montants
Les règles ci dessous valent partout et dans les deux systèmes.
Un montant s’arrondit au centième, au plus proche.
C’est RoundingMode.HALF_EVEN. Ce n’est pas ce que fait Math.round.
Ce que le monde ne contient pas
Pour éviter les fausses pistes :
- aucune horloge, aucune date réelle, aucune minuterie. Le temps est un compteur de nuits et un compteur d’audiences, et rien ne les fait avancer sauf une commande explicite ;
- aucune source de données externe. Tout ce que le système sait, il l’a reçu par une de ses propres interfaces ;
- aucune logique dans l’interface graphique. Elle est générée et ne fait qu’appeler l’API ;
- aucune validation de format. Supposez les charges utiles bien formées ; tout ce qui est refusé l’est pour une règle d’affaires, au moment que fixe le modèle d’exécution.
Glossaire
Le monde
| Terme | Sens |
|---|---|
| Carrefour | le point où six dimensions se superposent ; aucun jour, aucune horloge |
| Premiers | ceux qui l’auraient construit ; on n’a d’eux que le Carrefour |
| Traité du Carrefour | les quatre articles qui fondent l’auberge, le Consulat et leur indépendance |
| Dimension | l’une des six ; un monde habité, et une destination pour le Consulat |
| Espèce | détermine les exigences de logement, le régime et la voie de retour |
| Pièce | la monnaie de compte imposée par le Traité |
| Départage | le critère qui tranche une égalité ; il descend toujours jusqu’à un critère unique |
L’auberge
| Terme | Sens |
|---|---|
| Aubergiste | l’acteur unique du côté de l’auberge |
| Nuit | le tour de l’auberge, et sa seule mesure du temps |
| Action | une demande accumulée, exécutée en ordre d’arrivée au début de la nuit |
| Conséquence | une étape du déroulement de la nuit, appliquée dans un ordre imposé |
| Relevé d’existence | le titre qui atteste qu’un voyageur existe quelque part |
| Numéro d’existence | ce qui identifie un voyageur partout ; le nom n’identifie rien |
| Voyageur | numéro d’existence, nom, espèce, masse, dimension d’origine |
| Dimension d’origine | l’une des six destinations ; sans rapport avec l’espèce |
| Exigences | le triplet atmosphère / gravité / température, à satisfaire exactement |
| Régime | Carné, Végétal, Minéral ou Omnivore |
| Chambre | numéro, exigences, nombre de places |
| Séjour | le lien entre un voyageur et l’auberge : forfait, nombre de nuits, chambre |
| À l’aube | le départ anticipé : le voyageur paie la nuit qui s’achève, ses nuits suivantes sont annulées. Les causes sont définies par les stories |
| Ayant passé la nuit | l’assiette de la facturation : tout voyageur ACTIVE au repas du soir, y compris celui que l’étape des départs vient de faire partir. Jamais un BOOKED, qui n’a rien passé |
| Forfait | Royal, Confort ou Modeste — tarif et priorité au repas |
| Nuitée | le prix d’une nuit de séjour |
| Commodité | une option souscrite à un séjour, empilable avec d’autres |
| Garde-manger | les trois files de portions |
| Denrée / portion | végétale, carnée ou minérale ; chaque portion se périme |
| File | l’une des trois réserves, qui ne communique jamais avec les autres |
| Besoin quotidien | le nombre de portions qu’un voyageur réclame chaque nuit |
| Employé | il a un nom, une espèce, et l’espèce ne change jamais |
| Poste | cuisine, fraîcheur ou ménage ; au plus un par employé et par nuit |
| Quart | la répartition du personnel pour une nuit, établie seule |
| Consigne du soir | le seul mot que l’aubergiste ait à dire sur son personnel |
| Commis fraîcheur | l’employé qui empêche une réserve de périmer pour la nuit |
| Capacité de service | ce que la cuisine peut sortir d’une file dans une nuit |
| Découvert | ce qui manque à une réserve entre la demande calculée et la capacité obtenue |
| Registre | la comptabilité de l’auberge |
Le Consulat
| Terme | Sens |
|---|---|
| Audience | le tour du Consulat, indépendant de la nuit |
| Type de passage | Portail, Courant ou Convoi lourd — trois unités incompatibles |
| Règles d’entrée | ce qu’une dimension impose : quotas d’entrée et tarif de traversée ; déposées par elle, jamais fixées par le Consulat |
| Ouverture du passage | l’unique moment d’une audience où l’on entre dans une dimension ; ce qui n’est pas utilisé est perdu à la fermeture |
| Tarif de traversée | le prix de l’ouverture, indépendant du nombre de partants |
| Dossier de passage | le suivi d’une venue d’un voyageur en attente de retour |
| Venue | un séjour au Carrefour ; un voyageur peut en avoir plusieurs, chacune avec son dossier |
| Quota d’entrée | le nombre que la dimension reprend à chaque ouverture ; ordinaire ou d’urgence, par type de passage |
| Motif | la raison d’un départ ; il décide du quota applicable |
| Ancienneté | l’audience où un dossier a été ouvert ; jamais une nuit |
| Droits consulaires | ce que le Consulat perçoit sur les passages |
La frontière
| Terme | Sens |
|---|---|
| Fait | un événement survenu à l’auberge, inscrit au journal |
| Journal scellé | la liste immuable des faits d’une nuit |
| Transmission | l’envoi du journal au Consulat, à la fin de la nuit ; sans réponse et sans retour |
| Dépouillement | la lecture des journaux par le Consulat |