GLO-4002 2026

Carnet · Iter 4a · aubergiste

QUART — Le quart de la nuit

Description

En tant qu’aubergiste, je peux embaucher du personnel, et lui donner une consigne pour la nuit.

J’ai fini par admettre que je ne pouvais pas tout faire seul. J’ai donc embauché, et découvert que le problème n’était pas d’avoir des bras, mais d’avoir les bons.

Les trois postes

Chaque nuit, chacun tient au plus un poste, et personne ne choisit lequel.

Poste Ce que ça donne
Cuisine l’employé prépare les portions d’une réserve ; c’est lui qui décide combien il en sort
Fraîcheur le commis fraîcheur garde une réserve et empêche son contenu de périmer cette nuit là
Ménage l’employé fait les chambres qui conviennent à son espèce, et leurs clients dorment sans se plaindre

Ce qu’un employé peut cuisiner

Chaque réserve se travaille dans ses propres conditions, et personne n’a jamais réussi à les changer : la cuisine carnée est un brasier sec, la végétale une cave froide et humide, la minérale une forge sous gravité lourde. Mes employés sont d’espèces différentes, et chacun tient plus ou moins longtemps à chaque poste avant que son corps ne le rappelle à l’ordre. Un Plantagenêt fane devant le brasier, un Menhir s’effrite dans la cave, un Ondin s’effondre à la forge.

Le rendement, c’est ce qu’un employé sort d’une réserve en une nuit avant d’être épuisé. Un rendement nul veut dire qu’il n’y tient pas une minute.

Espèce de l’employé Végétale Carnée Minérale
Quidam 6 6 2
Pyrophore 2 10 0
Plantagenêt 10 0 2
Ondin 8 4 0
Menhir 0 2 12

Ces nombres sont des portions par nuit. Deux cuisiniers sur la même réserve additionnent leurs rendements ; une réserve sans cuisinier ne sort rien, même pleine à ras bord (voir critère 12).

Le plafond se consomme dans l’ordre de service. Comme je sers les Royaux d’abord, une cuisine à bout de souffle affame toujours les mêmes clients. Un voyageur privé de portions par une cuisine épuisée est traité exactement comme s’il manquait de vivres : il part à l’aube (voir critère 13 et l’exemple 2).

Le ménage

Pour faire le ménage d’une chambre, il faut y entrer, donc y respirer, y tenir debout et ne pas y geler. Un employé ne fait donc que les chambres dont l’ambiance est celle de son espèce, ce qui est la même règle que pour loger un client, appliquée cette fois à celui qui la nettoie.

Un employé au ménage fait toutes les chambres compatibles et qui comptaient un occupant pendant la journée (avant que les gens quittent), autant qu’il y en a (voir critères 8 et 9).

⚠️ On ne fait pas les chambres vides. Une chambre qui n’avait personne à l’étape 2 n’est pas faite, même si un employé compatible était disponible.

Il faut compter également les arrivants, puisqu’une chambre est retenue dès la réservation (voir critère 7).

⚠️ Une chambre occupée qui n’a pas été faite fait fuir tout le monde. Ses occupants ne se plaignent pas plus que les affamés : ils règlent leur note, me remercient poliment, et partent à l’aube frustrés, motif DISGUSTED. Qu’ils aient bien mangé n’y change rien (voir critères 10 et 11).

Un Menhir est donc le seul à pouvoir faire une chambre de Menhir, et aussi le seul à sortir du minéral en quantité. Il ne peut pas faire les deux la même nuit.

La fraîcheur

Un commis fraîcheur doit avoir un rendement non nul pour la réserve qu’on lui confie, d’après le même tableau que la cuisine. Un Pyrophore ne gardera jamais la réserve minérale.

Il en faut zéro ou un par réserve. Un second ne sert à rien (voir critère 6).

C’est un poste où le rendement est perdu, alors on y envoie le plus faible des éligibles.

L’épuisement

On ne fait pas travailler les gens indéfiniment. Un employé qui a tenu un poste (n’importe lequel) trois nuits d’affilée est épuisé : il lui faut une nuit complète sans poste avant de revenir. Une nuit sans poste remet son compteur à zéro (voir critères 3 et 4).

⚠️ On ne retient que le nécessaire. Ceux dont on n’a pas besoin se reposent, donc ne se fatiguent pas. Sans ça, tout le monde atteindrait sa troisième nuit en même temps et l’auberge se retrouverait sans personne.

Comment sont assignés les employés

Je n’affecte plus personne à la main, et aucune interface ne le permet.

Le quart s’établit à la deuxième conséquence de la nuit, juste après les arrivées, en trois passes.

📎 Une étape est une conséquence de la nuit, numérotée dans le tableau du déroulement. Une passe est un des trois temps de l’établissement du quart, à l’intérieur de l’étape 2. Les deux ont leurs propres numéros et ne se mélangent jamais.

Passe Ce qui est réparti Entre Décidé par
1 tout le personnel disponible ménage et cuisine moi, via l’API de la nuit
2 ce que la passe 1 a accordé à la cuisine fraîcheur et service un seuil sur le garde-manger
3 ce que la passe 2 a accordé au service les trois réserves une règle fixe
        personnel disponible

            ① mon choix
           ┌─────┴─────┐
        ménage       cuisine

            ② seuil du garde-manger
                  ┌─────┴─────┐
              fraîcheur    service

                       ③ règle fixe
                     ┌────────┼────────┐
                  carnée   végétale  minérale

Le schéma se déroule dans le sens de la consigne. Sous cuisine d’abord, la branche de droite se déroule en entier, puis le ménage récupère tout ce qu’elle n’a pas retenu. Sous ménage d’abord, c’est le ménage qui prélève en premier, et la branche de droite se déroule sur ce qui reste.

Si l’employé n’a pas été assigné au terme de l’exercice, alors il se repose.

Passe 1 — ménage ou cuisine

Qui décide : moi, au moment de faire passer la nuit. Deux valeurs possibles, et elles ne font que fixer l’ordre de service :

Ma consigne Qui se sert en premier Qui prend le reste
Ménage d’abord le ménage la cuisine
Cuisine d’abord la cuisine le ménage

Se servir en premier ne veut pas dire tout prendre. Aucun des deux côtés ne retient plus que son besoin, et celui qui passe en second travaille sur ce qu’aucun poste n’a réclamé (voir critères 4 et 21).

Ce que le ménage demande : un employé par ambiance logée cette nuit, et pas un de plus. Deux chambres de même ambiance se font avec un seul employé, même si leurs occupants ne sont pas de la même espèce.

Les ambiances sont traitées dans l’ordre du plus petit numéro de chambre qu’elles occupent. Une ambiance dont aucun employé compatible n’est disponible est sautée sans consommer personne, et ses chambres restent sales (voir critère 7).

Ce que la cuisine demande : rien qui s’annonce d’avance. Son besoin est exactement ce que les passes 2 et 3 retiennent : au plus un commis par réserve où quelque chose périt, puis, réserve par réserve, juste assez de cuisiniers pour couvrir la demande. Une réserve couverte n’en prend pas un de plus, une réserve à demande nulle n’en prend aucun, et un employé qu’aucune des deux passes n’a retenu n’est pas à la cuisine.

Donc, concrètement :

Ma consigne Comment ça se déroule
Ménage d’abord le ménage prélève son besoin dans tout le personnel disponible, puis les passes 2 et 3 se déroulent sur le reste
Cuisine d’abord les passes 2 et 3 se déroulent sur tout le personnel disponible et n’en gardent que le nécessaire, puis le ménage prélève son besoin dans ce qui subsiste

⚠️ La cuisine d’abord ne vide pas le personnel. Elle se sert avant, pas davantage. Ce dont elle n’a pas besoin revient au ménage, qui applique ensuite sa propre règle sans rien savoir de ce qui s’est passé aux fourneaux (voir l’exemple 1).

Passe 2 — fraîcheur ou service

Qui décide : personne. Un seuil regarde le garde-manger tel qu’il est avant la livraison de la nuit :

Règles: -La moitié ou plus du garde-manger périt cette nuit → fraîcheur d’abord.

  • Sinon → service d’abord.
  • Garde-manger vide → service d’abord.
Résultat du seuil Qui se sert en premier Qui prend le reste
Fraîcheur d’abord la fraîcheur le service
Service d’abord le service la fraîcheur

Ce que la fraîcheur demande : un commis par réserve où quelque chose périt cette nuit, dans l’ordre carné, végétal, minéral, et pas un de plus (voir critère 6).

⚠️ Le seuil compte les trois réserves ensemble. Une réserve minérale sur le point de tout perdre ne déclenche rien si on atteint pas le 50% en sommant les autres réserves.

Passe 3 — qui va à quelle réserve

Qui décide : une règle fixe, la même depuis toujours.

  1. On traite les réserves dans l’ordre carné > végétal > minéral.
  2. Pour la réserve en cours, on prend l’employé disponible dont le rendement pour cette réserve est le plus fort, départage par ordre alphabétique de nom.
  3. On s’arrête dès que le cumul couvre la demande, ou qu’il ne reste plus personne de compatible. On passe à la suivante avec ce qui reste.

On ne revient jamais en arrière. On prend le meilleur rendement disponible pour la réserve en cours, même dérisoire, même si cet employé était le seul capable de la suivante (voir critère 14 et l’exemple 3).

La demande de chaque réserve est calculée au moment d’établir le quart, sur les voyageurs présents cette nuit là, arrivants compris, chacun selon sa masse et son régime.

Déroulement d’une nuit

Actions possibles
Commander des denrées, souscrire ou résilier un abonnement.
Aménager ou rerégler une chambre.
Réserver un séjour.
Embaucher un employé.
Conséquences d’une nuit (en ordre)
1. Faire arriver les voyageurs dont le séjour commence cette nuit.
2. Établir le quart de la nuit.
3. Ranger les livraisons attendues.
4. Jeter les denrées périmées, sauf dans les réserves sous fraîcheur.
5. Servir le repas du soir.
6. Faire partir les voyageurs et libérer leurs places, frustrés compris, en consignant le motif.
7. Facturer la nuitée de chaque voyageur ayant passé la nuit.
8. Sceller et transmettre le journal de la nuit.

⚠️ L’étape 2 arrête tout d’un coup : qui cuisine quoi, quelles réserves sont gardées, quelles chambres sont faites. Plus rien ne bouge jusqu’au matin. La livraison de l’étape 3 arrive donc après que la règle de fraîcheur a compté le stock.

⚠️ Les arrivants de l’étape 1 sont là quand le quart s’établit. Ils comptent dans le besoin de ménage, dans la demande des réserves, et dans l’ordre de service. Une chambre qui n’était occupée que par un arrivant est une chambre occupée.

Conditions de succès

📎 Ce que « croissant » et « ordre alphabétique » veulent dire exactement : les départages, dans le fonctionnement.

# Description
1 Les embauches s’exécutent en ordre d’arrivée ; une embauche dont le nom est déjà pris est rejetée à l’exécution avec le motif STAFF_NAME_ALREADY_USED.
2 Le quart s’établit seul à l’étape 2, sans aucune action de l’aubergiste, et ne change plus jusqu’au matin.
3 Un employé qui a tenu un poste les trois nuits précédentes est épuisé et n’est pas retenu ; une nuit complète sans poste le remet en service et remet son compteur à zéro.
4 L’assignation ne retient que le nécessaire, des deux côtés de la passe 1 : le ménage ne prend pas plus d’un employé par ambiance logée, la cuisine ne prend que ce que les passes 2 et 3 retiennent. Les employés non retenus sont au repos.
5 Un employé ne tient qu’un poste par nuit. Le rendement dépend du couple espèce et denrée, et peut être nul.
6 Un commis fraîcheur n’est posté qu’à une réserve où quelque chose périt cette nuit. Il doit avoir un rendement non nul pour cette réserve ; on retient le plus faible rendement éligible, départage alphabétique. Zéro ou un par réserve ; un second n’a aucun effet.
7 Le besoin de ménage est d’un employé par ambiance logée cette nuit, arrivants compris. Les ambiances sont traitées dans l’ordre du plus petit numéro de chambre qu’elles occupent ; une ambiance sans employé compatible disponible est sautée sans consommer personne.
8 Un employé au ménage ne fait que les chambres dont l’ambiance est celle de son espèce ; on retient le premier par ordre alphabétique.
9 Un employé au ménage nettoie toutes les chambres de son ambiance qui comptaient au moins un occupant à l’étape 2 ; un second employé sur la même ambiance n’a aucun effet. Une chambre vide à l’étape 2 n’est pas nettoyée.
10 Tous les occupants d’une chambre non nettoyée partent à l’aube avec le motif DISGUSTED, même parfaitement nourris. C’est le traitement exact d’un voyageur mal servi, appliqué à une autre cause.
11 Un arrivant est un occupant comme un autre : si sa chambre n’a pas été nettoyée, il part à l’aube dès sa première nuit.
12 Une réserve sans cuisinier ne peut servir personne. Les capacités des trois réserves sont indépendantes.
13 La capacité se consomme dans l’ordre de service ; un voyageur privé de portions par une cuisine épuisée est traité exactement comme s’il manquait de vivres, motif UNDERFED.
14 La répartition des fourneaux est une passe unique, réserves dans l’ordre carné, végétal, minéral, meilleur rendement d’abord, départage alphabétique, sans retour arrière. Un employé dont le rendement est nul n’est jamais éligible.
15 La consigne du soir accompagne le passage de la nuit ; elle ne se déclare pas à l’avance et ne survit pas à la nuit.
16 Le choix entre fraîcheur d’abord et service d’abord est calculé, jamais donné : fraîcheur d’abord si la moitié ou plus du garde-manger périt cette nuit ; sinon service d’abord. Garde-manger vide, service d’abord.
17 Le test de fraîcheur porte sur le stock des trois réserves avant la livraison de la nuit.
18 Une réserve sous fraîcheur ne périme pas cette nuit et son contenu peut être servi ; elle peut périmer la nuit suivante.
19 DISGUSTED s’insère en queue de la précédence de SERV critère 10, qui devient : STAY_COMPLETED, puis UNDERFED, puis DISGUSTED. Un voyageur mal servi dont la chambre n’a pas été faite part UNDERFED ; celui dont la dernière nuit s’achève part STAY_COMPLETED, quoi qu’il ait subi par ailleurs.
20 La demande de chaque réserve est calculée à l’étape 2 sur les voyageurs présents cette nuit, arrivants compris, chacun selon sa masse et son régime.
21 La consigne du soir ne fixe que l’ordre de prélèvement. HOUSEKEEPING_FIRST : le ménage prélève son besoin sur tout le personnel disponible, puis les passes 2 et 3 se déroulent sur le reste. KITCHEN_FIRST : les passes 2 et 3 se déroulent d’abord, sur tout le personnel disponible, et le ménage prélève ensuite son besoin sur ce qu’elles n’ont pas retenu. Un employé dont aucun poste n’avait besoin n’est jamais retenu par le côté servi en premier.

🖥️ À l’écran

  • Le quart de la nuit, en entier : qui est où, qui se repose, qui est épuisé, et depuis combien de nuits chacun enchaîne.
  • Les deux règles qui ont tranché : la consigne reçue, et le calcul de fraîcheur avec ses nombres, portions périssantes et stock total. Sans ça personne ne peut expliquer pourquoi un commis a été posté ou pas.
  • Pour chaque réserve : la demande calculée, les cuisiniers retenus, la capacité obtenue, le stock au moment du service, ce qui est réellement sorti, et le découvert.
  • Pour chaque ambiance logée : les chambres concernées, les espèces qu’elle réclame, l’employé retenu, ou l’absence d’employé. C’est le seul endroit où l’on voit venir un départ pour frustration.
  • Les départs de la nuit avec leur motif, DISGUSTED compris.

API

Dans le texte Dans l’API
cuisine, fraîcheur, ménage KITCHEN, FRESHNESS, HOUSEKEEPING
ménage d’abord, cuisine d’abord HOUSEKEEPING_FIRST, KITCHEN_FIRST
fraîcheur d’abord, service d’abord FRESHNESS_FIRST, SERVICE_FIRST
frustré DISGUSTED

⚠️ POST /shifts n’existe plus. Aucune interface ne permet d’affecter un employé. C’est voulu, et c’est définitif.


✅ Embaucher un employé

POST /staff

{
  "staffName": "Ortie"::string,
  "species": "PLANTAGENET"::string(QUIDAM | PYROPHORE | PLANTAGENET | MERFOLK | MENHIR)
}

➡️ HTTP 202 Accepted


✅ Passer la nuit

POST /nights — la charge utile gagne la consigne du soir.

{
  "staffingPolicy": "HOUSEKEEPING_FIRST"::string(HOUSEKEEPING_FIRST | KITCHEN_FIRST)
}

➡️ HTTP 200 Ok

{
  "number": 7::int
}

✅ Consulter le personnel

GET /staff

➡️ HTTP 200 Ok

[
  {
    "staffName": "Ortie"::string,
    "species": "PLANTAGENET"::string,
    "consecutiveNights": 2::int,
    "exhausted": false::boolean,
    "currentPost": "KITCHEN"::string(KITCHEN | FRESHNESS | HOUSEKEEPING) || null,
    "currentFoodType": "PLANT"::string || null
  }, ...
]

currentPost vaut null pour un employé au repos. currentFoodType vaut null au ménage, où les chambres nettoyées se déduisent de l’espèce.


✅ Consulter la dernière nuit

GET /nights/last — le rapport gagne une section shift.

"shift": {
  "staffingPolicy": "HOUSEKEEPING_FIRST"::string || null,
  "freshnessPolicy": "SERVICE_FIRST"::string || null,
  "housekeeping": [
    {
      "staffSpeciesRequired": ["MENHIR"]::string(QUIDAM | PYROPHORE | PLANTAGENET | MERFOLK | MENHIR)[],
      "roomNumbers": [4, 7]::int[],
      "occupants": 3::int,
      "staffName": "Basaltazar"::string || null
    }, ...
  ],
  "reserves": [
    {
      "foodType": "MEAT"::string,
      "demand": 12::int,
      "cooks": ["Brann"]::string[],
      "capacity": 10::int,
      "freshnessKeeper": null::string,
      "stockAtServiceTime": 40::int,
    }, ...
  ],
  "resting": ["Aquarelle"]::string[],
  "exhausted": ["Aliqua"]::string[]
}

Une entrée de housekeeping décrit une ambiance logée, pas une espèce d’occupant. staffSpeciesRequired énumère les espèces d’employés capables d’entrer dans cette ambiance, par ordre alphabétique. Il n’est jamais vide et toujours renseigné, y compris quand personne n’a été retenu : c’est ce qui permet de lire « il fallait un Menhir, il n’y en avait pas ».

⚠️ Ce champ ne décrit jamais les occupants. Deux voyageurs d’espèces différentes peuvent partager une ambiance sans que le tableau en dise quoi que ce soit : il ne parle que de qui peut y faire le ménage.

Les ambiances sont retournées dans l’ordre où elles ont été traitées. staffName vaut null pour une ambiance logée dont les chambres n’ont pas été nettoyées : ce sont exactement les occupants qui partiront frustrés.

Dans le même rapport, chaque entrée de departures gagne une cause possible :

"cause": "STAY_COMPLETED"::string(STAY_COMPLETED | UNDERFED | DISGUSTED)

Un voyageur ne figure toujours qu’une fois dans departures (voir critère 19).


✅ Consulter les chambres

GET /rooms — chaque chambre gagne un champ.

{
  "roomNumber": 4::int,
  "cleanedLastNight": false::boolean || null,
  ...
}

null tant qu’aucune nuit n’est passée.

💡 Exemple 1 — le seau ou le fourneau

Nuit 6. Deux employés disponibles, Basaltazar (Menhir) et Ortie (Plantagenêt). Les trois réserves sont largement garnies et rien n’y périme cette nuit, donc service d’abord.

Chambres occupées :

Chambre Réglages Occupants Ce qu’ils mangent
3 humide / normale / chaude deux Plantagenêts de 200 kg 5 végétales chacun, soit 10
4 standard / lourde / froide trois Menhirs de 160 kg 4 minérales chacun, soit 12

Deux ambiances logées, donc un besoin de ménage de deux employés. Demande calculée : 10 végétales, 12 minérales, rien en carné.

Consigne « ménage d’abord » : les ambiances sont traitées dans l’ordre du plus petit numéro de chambre. Ortie fait la chambre 3, Basaltazar fait la chambre 4. Il ne reste personne aux fourneaux, et les deux réserves sortent zéro portion. Les cinq clients ont une chambre impeccable et partent UNDERFED.

Consigne « cuisine d’abord » : la répartition traite la carnée (demande nulle, personne), puis la végétale, qui prend Ortie (10, couverte), puis la minérale, qui prend Basaltazar (12, couverte). Il ne reste personne pour le ménage : les deux espèces sont sautées, les deux chambres restent sales. Les cinq clients mangent à leur faim et partent DISGUSTED, file ordinaire.

⚠️ Les deux consignes vident l’auberge. Elles ne le font simplement pas avec le même motif, donc pas dans la même file au guichet du Consulat.

Variante — Bourrache arrive en renfort

Même nuit, mêmes chambres, mais un troisième employé : Bourrache, Plantagenêt comme Ortie, donc mêmes rendements (10 / 0 / 2).

Consigne « cuisine d’abord » : la carnée a une demande nulle et ne prend personne. La végétale demande 10 ; Bourrache et Ortie sortent 10 chacune, le meilleur rendement est à égalité, l’alphabet tranche pour Bourrache, et la réserve est couverte, donc on s’arrête là. La minérale demande 12 et prend Basaltazar. Ortie n’a jamais été réclamée : elle revient au ménage et fait la chambre 3. Les deux Plantagenêts mangent et dorment au propre, ils restent. La chambre 4 n’a plus de Menhir disponible : ses trois occupants partent DISGUSTED.

Consigne « ménage d’abord » : la chambre 3 prend Bourrache (premier alphabétique parmi les compatibles), la chambre 4 prend Basaltazar. Il ne reste qu’Ortie pour les fourneaux : elle couvre la végétale, et la minérale n’a plus personne, 0 sur 12. Les deux chambres sont propres, les deux Plantagenêts restent, les trois Menhirs partent UNDERFED.

⚠️ La cuisine s’est arrêtée à deux employés alors qu’il y en avait trois. C’est ce que veut dire « on n’assigne pas plus que ce dont la réserve a besoin ». Une cuisine qui prendrait tout le monde n’aurait jamais rendu Ortie au ménage, et les deux Plantagenêts seraient partis DISGUSTED avec les Menhirs.

💡 Exemple 2 — la réserve est pleine et les gens partent

Réserve carnée : 30 portions. En cuisine carnée, un seul Ondin : 4 portions par nuit.

Voyageur Forfait Il lui faut
Brann Royal 4 carnées
Aliqua Confort 2 végétales + 2 carnées
  1. Brann consomme les 4 portions que la cuisine sait sortir. Capacité restante : 0.
  2. Aliqua obtient ses végétales, mais la cuisine carnée ne peut plus rien sortir. Elle reçoit 0 carnée sur 2, donc manque, donc part à l’aube.

La réserve carnée contient encore 26 portions. Elles n’ont servi à personne.

⚠️ C’est exactement ce que montre l’écran du quart : demande 6, capacité 4, stock 30, servi 4. Sans cet écran, l’aubergiste croit à une erreur.

💡 Exemple 3 — le glouton donne le Menhir à la carnée

Deux employés aux fourneaux : Ortie (Plantagenêt, 10 / 0 / 2) et Basaltazar (Menhir, 0 / 2 / 12).

Demande : 6 carnées, 4 végétales, 12 minérales.

Réserve Ce que fait la règle Résultat
Carnée, besoin 6 Ortie a un rendement nul, donc inéligible. Seul Basaltazar reste, rendement 2, non nul, donc retenu 2 sur 6, manque 4
Végétale, besoin 4 Ortie, rendement 10 couverte
Minérale, besoin 12 plus personne 0 sur 12

Basaltazar a produit deux portions carnées en abandonnant une réserve où il en produisait douze sur douze. La réserve minérale peut être pleine : tous les Menhirs partent.

L’arrangement évident, Basaltazar au minéral et Ortie au végétal, laissait la carnée à découvert de 6 au lieu d’un découvert total de 16. La règle ne le cherche pas, et elle n’a pas le droit de le chercher.

💡 Exemple 4 — la fraîcheur repousse la poubelle

Douze portions végétales rangées à la nuit 1 doivent être jetées au tri de la nuit 4. Le garde-manger compte ce soir là 20 portions en tout, dont 12 périssent, soit plus de la moitié : la nuit passe en fraîcheur d’abord.

Un commis est posté à la réserve végétale, la seule où quelque chose périt, choisi parmi les éligibles de rendement non nul en retenant le plus faible.

Rien n’est jeté cette nuit là, et les douze portions servent au repas de la nuit 4. À la nuit 5, si le test ne se déclenche plus, elles partent.