ADR 0107 – Rituel du matin et du soir
Accepté (2026-10-17, vague 3 du document d'idées)
ADR 0107 – Rituel du matin et du soir
Statut : Accepté (2026-10-17, vague 3 du document d’idées)
« Planifier la journée » (ADR 0070) additionne les estimations d’une vue et prévient au-delà d’une capacité, mais ne guide pas : on regarde, on déplace à la main. Un assistant en étapes prolonge cette idée : le matin on choisit ce qu’on fait aujourd’hui, le soir on solde la journée et on reporte le reste.
Décision
Configuration : clé ritual d’un dashboard
# config/dashboards/maintenant.yaml
ritual:
eveningFrom: 17 # heure locale à partir de laquelle la page propose le soir
date: tache.echeance # champ date écrit pour planifier ou reporter
sum: tache.estimation # champ nombre (minutes) additionné
capacity: 360 # minutes disponibles par jour
morning: # vues proposées le matin (1 à 4), dédoublonnées dans l'ordre
- { view: aujourdhui, label: Du jour }
- { view: taches-en-cours, label: En cours }
evening: aujourdhui # vue des tâches ouvertes à reporter le soir
- Toutes les valeurs sont dans
config/: aucune capacité, heure ni nom de vue ou de champ dans le code. Le rituel est lu sur le dashboard d’accueil, sinon le premier dashboard qui en déclare un (findRitual). - Contrôles au chargement (
DefinitionLoader.checkRitual, méta-schéma) :dateest un champ date d’aspect,sumun champ nombre (pas un score calculé), les vues existent et portentdateetsumparmi leurs colonnes (la page lit les valeurs des lignes reçues, comme le widget « Aujourd’hui »). Un dashboard invalide est ignoré et signalé par/api/definitions/status, sans faire tomber l’application.eveningFrom0 à 23,capacity≥ 1, tous deux obligatoires : pas de valeur cachée dans le code. - Une vue de plus dans
config/:taches-en-cours(tâches au statut « en cours », mêmes colonnes queaujourdhui).
Page /rituel
Page chargée à la demande, commande de palette « Rituel du matin et du soir » (proposée seulement si un rituel est configuré). Matin ou soir selon l’heure locale (eveningFrom), forcé par ?moment=matin|soir ou par les boutons Matin / Soir. Assistant en deux étapes, avec un fil des étapes.
- Matin : 1. Choisir : les tâches des vues
morning(une seule fois chacune, étiquetée par sa source), cases à cocher ; les tâches déjà dues (date aujourd’hui ou passée) sont cochées au départ, les tâches en cours se choisissent. Barre de charge (splitLoad, ADR 0088) et « 2 h 30 retenues sur 2 h · 30 min de trop », avertissement au-delà de la capacité (sans bloquer). 2. Planifier : récapitulatif ; « Planifier la journée » écrit la date du jour dans les tâches cochées qui ne l’ont pas déjà (replanification, ADR 0038 :PATCH /api/nodes/{id}/aspects/{aspect}, validation, workflow etnode_eventdu serveur) ; option « Reporter à demain les tâches échues non retenues » (décochée au départ). - Soir : 1. Bilan : terminés, créés et modifiés aujourd’hui (
GET /api/journee, ADR 0067), avec la liste des tâches terminées. 2. Reporter : les tâches de la vueeveningencore ouvertes, toutes cochées ; choix « Demain » ou « Dans une semaine » ; « Reporter N tâches » écrit la nouvelle date par la même replanification. Les tâches décochées ne sont pas touchées. - Les écritures passent par
reschedule(quatre requêtes en parallèle, erreurs par tâche affichées) et rafraîchissent les widgets de l’accueil (DashboardRefresh). Aucune nouvelle route serveur. - Page de repli sans rituel configuré : message qui renvoie à la clé
ritual.
Alternatives écartées
- Nouveau type de définition
config/rituals/: un chargeur, un registre et une route de plus pour un seul jeu de valeurs ; la clé d’un dashboard réutilise le chargement, le contrôle des vues et l’API existants, au prix de dépendre d’un dashboard (acceptable : le rituel prolonge la page d’accueil). - Étendre les revues guidées (
config/reviews/) : une revue montre des vues à parcourir, pas des choix cochés ni une charge ; le mélange alourdirait son modèle. - Écrire dans une opération groupée serveur (API des lots) : donnerait « Annuler » mais pas besoin ici (la replanification est rejouable depuis la page ou la fiche) ; peut s’ajouter plus tard sans changer la configuration.
- Reporter « Un jour peut-être » depuis le soir : action rapide propre à un aspect (rang dans l’aspect), non générique ; les deux reports de date suffisent.
Limites connues
- Le rituel ne mémorise pas qu’il a été fait : on peut le rejouer ; les tâches déjà planifiées pour aujourd’hui sont simplement recochées.
- Deux vues sont supposées renvoyer des tâches du même aspect que
date(sinon une tâche sans cet aspect est ignorée à l’écriture). - La capacité est la même chaque jour (pas de jour férié ni de capacité réduite).
Corrections de la revue
- Règle d’écriture des dates : le rituel n’écrit jamais une date antérieure à la date actuelle de la ligne et ne ramène jamais une échéance à venir à aujourd’hui. Le matin,
toTodayne concerne que les lignes cochées sans date ou en retard (date < aujourd’hui) ; une date d’aujourd’hui ou à venir n’est pas touchée (« garde sa date » dans le récapitulatif). Le soir, seules les lignes dont la date est définie et ≤ aujourd’hui sont proposées et reportées ; les autres ne sont pas touchées. Les choix de report ont un décalage d’au moins 1 jour. Le résumé du matin compte les dates réellement écrites. - Choix de report dans
config/: clé obligatoireritual.carry: [{ label, days }](1 à 4 choix,days1 à 365). Le méta-schéma etDefinitionLoader.checkRitualrefusent un décalage inférieur à 1, un décalage ou un libellé en double ; plus de constante dans le code (CARRY_CHOICESretiré). Les textes de la page sont neutres (« éléments », « échus »), sans vocabulaire propre à l’aspecttache. - Chargements désordonnés : un jeton de génération dans
load_ignore la réponse d’un chargement plus ancien ; les boutons Matin / Soir sont désactivés pendant une écriture. L’état d’erreur propose « Réessayer ». selectionLoad(inutilisé : la page calcule la charge parsplitLoad) est retiré.