Grace
Référence

Dashboard

L'app web : pages, modèle installé vs catalogue, endpoints /web/*.

platform/frontend/ — React 19 + Vite + Tailwind v4 + react-router + Mermaid. Auth par session Better Auth (cookie httpOnly), client dans src/lib/auth-client.ts (plugins organization, admin, multiSession, sso). Tape l'API backend sous /web/* ; l'auth vit sous /api/auth/*.

Connexion & organisations

Trois voies de connexion : e-mail/mot de passe, Google OAuth, ou le SSO de son organisation (OIDC/SAML, routé par domaine e-mail). Après connexion, l'utilisateur crée ou rejoint une organisation (tenant) ; toute nouvelle organisation démarre en « en attente d'approbation ». Tant qu'un administrateur plateforme ne l'a pas approuvée, ses membres voient un écran d'attente avec l'étape suivante et peuvent seulement se déconnecter. Le dashboard, le catalogue, les projets et les API métier restent indisponibles. Un utilisateur membre de plusieurs organisations bascule de l'une à l'autre via la palette de commandes (⌘K), sans se ré-authentifier (multi-session).

Pages

RouteContenu
/loginConnexion / création de compte : e-mail + mot de passe, Google, ou SSO d'organisation.
/Accueil (sélection d'un projet ou création).
/talentsCatalogue : recherche + cartes des talents Grace et des talents actifs de l’organisation, avec source, version publiée et politique projet.
/talents/:idFiche talent : présentation, graphe des dépendances directes (cliquable au pointeur et au clavier), rôles / déclencheurs / budget, tests de conformité, aperçu compact, Installer.
/specializationsBibliothèque des spécialisations builtin et de l'organisation active : consulter, créer, éditer, dupliquer ou supprimer une spécialisation custom. Le paramètre ?specialization=<id> ouvre son détail dans le tiroir sans créer une nouvelle route.
/orgEspace organisation : membres & rôles, invitations, statut, SSO et hébergement de code. Une navigation persistante donne accès aux vues analytiques autorisées.
/org/insightsSanté opérationnelle de l'organisation active (owner/admin d'organisation).
/org/talent-adoptionAdoption des talents dans les projets de l'organisation active (owner/admin d'organisation).
/org/expertisesCréation, vérification, publication et cycle de vie des talents propres à l’organisation (expertises privées côté API, owner/admin d’organisation).
/org/newCréation d'une organisation.
/accept-invitation/:idAcceptation d'une invitation reçue par e-mail.
/projects/newCréation projet (dans l'organisation active) → onboarding 2 étapes (.mcp.json + stub CLAUDE.md).
/projects/:idDétail projet.

Une palette de commandes globale (⌘K / Ctrl+K) accélère la navigation vers les projets, les talents et la bibliothèque des spécialisations. Une spécialisation nommée ouvre directement son tiroir de détail ; le changement d'organisation active reste porté par le sélecteur d'organisation.

L'administration plateforme (rôle user.role="admin") passe par les endpoints /web/admin/* (liste des organisations et de leur statut, approuver / rejeter / suspendre / réactiver, users, évènements de sécurité).

Le dashboard renvoie vers cette documentation à des points clés : entrée Documentation de la barre latérale, guide de démarrage (accueil), onboarding Brancher un projet, et fiches conceptuelles (catalogue → Qu'est-ce qu'un talent ?, spécialisations). Ces liens utilisent la configuration runtime GRACE_DOCS_BASE (voir Variables d'environnement) et s'ouvrent dans un nouvel onglet.

Modèle « installé » vs « catalogue »

Les talents Grace et les talents d’organisation optionnels suivent trois états : non installéinstallé mais désactivéinstallé et actif. Un talent d’organisation obligatoire est appliqué à tous les projets sans installation manuelle ; le catalogue projet l’affiche coché et verrouillé. La page projet n’affiche que les talents installés explicitement ; le catalogue présente aussi les talents obligatoires. Le MCP sert les talents Grace actifs, les talents optionnels sélectionnés et les talents obligatoires de l’organisation.

Page projet

  • Schéma des talents installés — graphe Mermaid (activé / désactivé / requis non installé / manquant), nœuds cliquables, stats Installés / Actifs / Manquants.
  • Liste des installés — toggle, désinstaller, « voir le modèle » (diagramme structurel).
  • État vide — « Démarrer avec un spécialisation » ou catalogue.
  • Connexion MCP (repliable) — retrouve / régénère le .mcp.json + stub CLAUDE.md.
  • Validation CI (repliable) — config dependency-cruiser générée depuis les talents.
  • Onglet Activité — tableau des actions tracées, lu depuis trace_events (voir Tracing & activité) : Date, Action, Auteur, Source, Route, Statut. Un clic n'importe où sur la ligne ouvre le tiroir de détail, qui nomme l'auteur du geste ainsi que les talents entrés et sortis de la sélection. Chaque appel MCP indique l'outil de développement d'où il vient.
    • Tri — Date, Action ou Auteur, par clic sur l'en-tête ; un second clic inverse le sens. Le tri porte sur ce que la cellule affiche, pas sur la colonne SQL voisine : Action se range dans l'ordre alphabétique des libellés, le même que celui de la liste du filtre, et non dans celui des types techniques.
    • Filtres — quatre listes multi-sélection : Action, Auteur, Source et Statut. Plusieurs valeurs d'un même filtre se lisent en « ou », les filtres entre eux en « et ».
    • Ce qu'elles proposent — les valeurs viennent du journal lui-même (GET /web/projects/:id/traces/filter-options), pas d'une liste tenue ailleurs : un filtre ne propose donc jamais une valeur qui ne ramènerait aucune ligne. Elles suivent la portée de lecture, si bien qu'un membre ne se voit proposer que ce que sa propre consommation contient. Source est la clé qu'affiche la colonne — Web, MCP pour un client MCP qui ne se nomme pas, sinon le nom de l'outil de développement (claude code, codex…) sans son numéro de version, deux sorties du même outil étant le même outil. Statut est le code HTTP lui-même : on demande les 404, pas « les échecs ».
    • URL — tri et filtres vivent dans les paramètres de l'URL (sort, order, type, author, source, status), donc une vue filtrée survit au rechargement et se partage par lien. type, author, source et status s'y répètent, une occurrence par valeur retenue. Un type, un author ou un status mal formé y est ignoré plutôt que servi au serveur, qui le refuserait ; une source inconnue, elle, est servie telle quelle et ne ramène rien — aucune liste ne connaît d'avance le nom qu'un outil se donne.
  • Supprimer le projet (confirmation inline ; cascade DB).

Endpoints web (/web/*, session Better Auth, scopés par l'organisation active)

L'authentification (sign-in/up, Google, SSO, organisations, admin, sessions) est servie par Better Auth sous /api/auth/*. Les endpoints métier restent sous /web/* :

GET  /web/orgs/current/status                                      (statut d'approbation)
GET|POST /web/orgs/current/sso · POST /web/orgs/current/sso/test    (config SSO de l'organisation)
GET|POST /web/orgs/current/expertises                               (liste filtrée, création)
GET|PATCH /web/orgs/current/expertises/:id                          (détail, nouvelle version de travail)
POST /web/orgs/current/expertises/:id/trigger-proposal              (proposition de déclencheurs)
PUT  /web/orgs/current/expertises/:id/triggers                      (confirmation des déclencheurs)
POST /web/orgs/current/expertises/:id/{activate|publish|deactivate|reactivate}
GET  /web/admin/organizations · POST /web/admin/organizations/:id/{approve|reject|suspend|reactivate}
GET  /web/admin/users · GET /web/admin/security-events             (admin plateforme)
GET  /web/projects · POST /web/projects · GET|DELETE /web/projects/:id
GET  /web/projects/:id/setup · POST /web/projects/:id/token       (config / régénération token)
GET  /web/projects/:id/installed
POST /web/projects/:id/talents (install) · PATCH (toggle) · DELETE /:talentId (uninstall)
POST /web/projects/:id/apply-specialization
POST /web/projects/:id/file               (lecture d'un fichier de talent)
GET  /web/projects/:id/validator-config   (sortie B / CI)
GET|PUT|DELETE /web/projects/:id/relevance   (réglages pertinence par projet)
GET  /web/catalog[?query] · GET /web/catalog/facets · GET /web/catalog/:id
GET  /web/specializations · POST /web/specializations · PATCH|DELETE /web/specializations/:id · POST /web/specializations/:id/duplicate
GET  /web/activity/summary · GET /web/projects/:id/traces/summary
GET  /web/projects/:id/traces[?type&author&source&status&sort&order&actionOrder&scope&limit&offset]
GET  /web/projects/:id/traces/filter-options[?scope]   (valeurs présentes dans le journal)
GET  /web/projects/:id/talents/:talentId/usage

Approbation d’organisation

Toutes les routes métier /web/* exigent que l’organisation active soit approuvée. Dans le cas contraire, elles renvoient 403 organization_not_approved; seule GET /web/orgs/current/status reste disponible afin d’afficher l’état d’attente. Les routes d’administration plateforme restent accessibles à un administrateur plateforme pour qu’il puisse approuver l’organisation.

Les réponses expertise sont scopées par l'organisation active et exigent un rôle owner/admin. Une ressource d'une autre organisation est masquée en 404. Les écritures portent une révision attendue ; une concurrence renvoie 409 expertise_revision_conflict avec la version serveur à comparer.

→ Guide utilisateur : Gérer les talents de l’organisation.

Design

Direction « console claire et moderne » : accent iris #6D5EF6, ambre #E0900C pour les manquants. Type : Space Grotesk (display) + Plus Jakarta Sans (corps) + JetBrains Mono (IDs / code). Tokens et utilitaires (.card, .btn-primary, .input, .chip…) dans platform/frontend/src/index.css (@theme Tailwind v4).

On this page