Second Brain documentation

ADR 0103 – États vides utiles

Accepté (2026-10-17, vague 3 du document d'idées)

← Toutes les décisions

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é empty d’une vue (config/views/, au niveau de la vue, pas de display) : empty: { message?, action?: { label, type? | template? } }. Un message ou une action au moins ; type et template sont exclusifs et doivent exister dans config/ (contrôle au chargement : le fichier fautif est ignoré et signalé, comme les autres erreurs de vue). Méta-schéma view.schema.json, record ViewDefinition.Empty / EmptyAction, exposé tel quel par GET /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é : une action y est refusée au chargement).
  • Composant partagé app-empty-state et fonction pure emptyStateOf (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 bloc sb-vue d’une note, le widget view d’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 : empty ajouté à 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.