ADR 0103 – États vides utiles
Accepté (2026-10-17, vague 3 du document d'idées)
ADR 0103 – États vides utiles
Statut : Accepté (2026-10-17, vague 3 du document d’idées)
Une vue, un widget ou un panneau sans résultat affichait « Rien pour l’instant » : l’écran ne disait ni pourquoi ni quoi faire. Un état vide doit expliquer et proposer l’action naturelle (« Aucune tâche aujourd’hui · + Nouvelle tâche »).
Décision
- Clé
emptyd’une vue (config/views/, au niveau de la vue, pas dedisplay) :empty: { message?, action?: { label, type? | template? } }. Un message ou une action au moins ;typeettemplatesont exclusifs et doivent exister dansconfig/(contrôle au chargement : le fichier fautif est ignoré et signalé, comme les autres erreurs de vue). Méta-schémaview.schema.json, recordViewDefinition.Empty/EmptyAction, exposé tel quel parGET /api/definitions/views. - Le bouton ouvre le formulaire de création
/nodes/new?type=<type>ou?template=<modèle>(nœud libre sans l’un ni l’autre). Rien n’est créé tant qu’on n’a pas validé ; aucune valeur n’est préremplie (une vue contextuelle ne propose donc pas d’action, le nœud ne serait pas rattaché : uneactiony est refusée au chargement). - Composant partagé
app-empty-stateet fonction pureemptyStateOf(core/empty-state.ts) : texte et action de la vue, sinon repli générique propre à l’écran, sans bouton. Utilisé par la page d’une vue, les sections du panneau de contexte (variante compacte), le blocsb-vued’une note, le widgetviewd’un tableau de bord, le widget Inbox, la page Inbox et un tableau de bord sans widget. - Filtres choisis : sur la page d’une vue, quand l’utilisateur a choisi des filtres, le message de la vue (« Aucune tâche aujourd’hui ») serait faux ; l’écran dit « Aucun nœud ne correspond aux filtres choisis. ».
- Config livrée :
emptyajouté à 19 vues (tâches du jour, de la semaine, ouvertes, en retard, enlisées, à relancer, courriers sans réponse, notes à relire ou récentes, factures à payer, projets sans suite…). L’action de création n’est proposée que là où elle a un sens (tâche, note, facture) ; une vue de contrôle (retards, enlisées) dit seulement que tout est en ordre. - Aucun domaine en dur : textes et types viennent de
config/.
Alternatives écartées
- Valeurs préremplies par l’action (projet courant, échéance du jour) : demanderait un langage de préremplissage propre ; l’API de modèles (
template) le fait déjà pour qui en a besoin. - Message dans
display: l’état vide concerne la vue entière (aussi en widget et en panneau), pas son mode d’affichage.