Pourquoi le site de documentation ne fonctionne pas
L'instinct est de diriger l'agent vers le site du design system. Cela aide rarement, pour quatre raisons structurelles qui n'ont rien à voir avec la qualité du site.
| Site de documentation | Besoins d'un agent | |
|---|---|---|
| Mode d'accès | Parcouru — on se rend sur la page dont on a besoin | Tout l'essentiel dans le contexte, avant la première décision |
| Organisation | Par composant : Bouton, Input, Carte | Par décision : rôles couleurs, densité, élévation, interdictions |
| Ton | Décrit l'intention — "nos boutons inspirent la confiance et sont accessibles" | Énonce les contraintes — "font-weight 500, radius 6px, jamais de dégradé" |
| Exhaustivité | Couvre ce qui existe | Doit aussi couvrir ce qui ne doit pas exister |
C'est la ligne sur l'organisation que les gens oublient. Un site organisé par composant est parfait pour quelqu'un qui sait déjà qu'il a besoin d'un Bouton. Un agent sur le point de construire un écran n'a pas encore décidé quels composants utiliser — ses premières décisions concernent la densité, la hiérarchie et la mise en page, et c'est précisément ce qu'un site organisé par composants ne couvre jamais.
La ligne sur l'exhaustivité est la plus déterminante. La documentation décrit ce qui existe, car c'est sa fonction. Mais la différence entre votre interface et une interface générique réside principalement dans un ensemble de choses que vous ne faites jamais, et aucune page de composant ne les mentionnera jamais.
Ce que contiennent réellement les fichiers
Nous avons analysé 299 fichiers DESIGN.md publiés dans des dépôts et répertoires publics — des fichiers écrits délibérément pour donner des directives de design aux agents IA — et mesuré leur contenu. 72 étaient spécifiquement des fichiers de design visuel. Le schéma est suffisamment constant pour servir de liste de contrôle de ce qu'il faut éviter.
| Part des fichiers | |
|---|---|
| Couleurs en hexadécimal brut, sans rôle sémantique | 86% |
| Aucune interdiction de quelque nature que ce soit | 76% |
| Aucune définition du mode sombre | 69% |
| Aucun motif distinctif | 57% |
| Au moins un adjectif vague utilisé comme consigne | 54% |
| Aucune valeur de taille concrète | 44% |
| Mentionne la typographie | 83% |
Mettez les deux dernières lignes en regard. La typographie est mentionnée dans 83 % des fichiers, mais 44 % ne contiennent aucune valeur de taille concrète. Cet écart résume tout le problème en une seule statistique : les fichiers parlent de typographie sans jamais préciser la taille des éléments.
Le chiffre concernant les adjectifs représente l'autre moitié du problème. « Clean » apparaît dans 39 % de ces fichiers, « moderne » dans 36 %. Ce sont des mots qu'un modèle satisfait en produisant le centre de sa distribution d'entraînement, ce qui correspond précisément au look générique que le fichier était censé éviter.
Un modèle à qui l'on demande un style « clean et moderne » produit la moyenne de tout ce qu'il a vu. C'est également ce que fait le modèle de n'importe qui d'autre à qui l'on demande la même chose.
Les sept changements
Chacun d'entre eux répond à l'un des échecs mesurés ci-dessus. Appliqués ensemble, ils transforment une description en une instruction exécutable.
- 1
Attribuez un rôle à chaque couleur, pas seulement une valeur
#6b7280est une valeur qu'un modèle utilisera indistinctement pour le corps de texte, les bordures, les icônes, les placeholders et les états désactivés.--text-muted, décrit comme étant uniquement pour le texte secondaire et de soutien, a une fonction précise. Cinq rôles valent mieux qu'un code hexadécimal, et ils vous permettent de modifier les bordures plus tard sans modifier les légendes.--text-muted: #6b7280 /* secondary and supporting text only */ --border-subtle: #e5e7eb /* structural edges, dividers */ --text-disabled: #9ca3af /* disabled controls only */ - 2
Remplacez chaque adjectif par un nombre ou une règle
« Espacement généreux » devient « écart de section 64px, padding de carte 24px ». « Typographie clean » devient une échelle. Si une phrase ne peut pas être vérifiée sur un écran rendu, c'est de la décoration.
- 3
Rédigez les interdictions
C'est la section ayant le plus d'impact, et celle que 76 % des fichiers omettent totalement. Cinq lignes suffisent pour commencer.
## Never - No gradients - No drop shadows — elevation is a surface step plus a 1px border - No font-weight above 600 - No colour value outside the token set - No border-radius above 12px - 4
Définissez le mode sombre, ne le laissez pas être dérivé
S'il n'est pas défini, le modèle inverse le mode clair, et le résultat échoue de manière prévisible : les ombres ne sont plus lisibles, les gris moyens perdent leur contraste aux deux extrémités, et un accent saturé qui paraissait assuré sur blanc devient éblouissant sur un fond presque noir. Un second jeu de tokens coûte une heure de travail et élimine toute une catégorie de retouches.
- 5
Énoncez explicitement la décision de densité
Savoir s'il s'agit d'un outil dense ou d'une surface marketing aérée modifie chaque choix ultérieur, et c'est la décision que la plupart des fichiers ne prennent jamais. Si votre produit comporte les deux types de surfaces, cela nécessite deux fichiers, et non un seul fichier ambigu.
- 6
Nommez au moins deux motifs
Ces éléments spécifiques et récurrents qui rendent le design unique : une règle d'accentuation de 2px à gauche des titres de section, des colonnes numériques toujours tabulaires et alignées à droite, une manière particulière de dessiner les états vides. 57 % des fichiers n'en ont aucun, c'est pourquoi leur résultat est correct mais sans caractère.
- 7
Pointez vers le fichier de tokens ; ne le recopiez jamais
Dès qu'une valeur hexadécimale existe à la fois dans le fichier de design et dans le fichier de tokens, l'un sera mis à jour et l'autre non, et le modèle utilisera avec assurance la valeur obsolète. Référencez, ne copiez pas.
Si vous ne devez en appliquer qu'un seul, choisissez le troisième. Une liste d'interdictions représente quinze minutes de travail et modifie le résultat généré plus que les six autres réunis, car elle restreint l'espace immense de décisions que vos permissions ont laissé ouvert.
Ce que produisent ces sept changements, au final, c'est un fichier dont les valeurs peuvent être résolues par un agent sans qu'il ait besoin d'inventer quoi que ce soit. Voici ces mêmes informations présentées sous forme de tableau plutôt que de texte — utile ici comme checklist de ce que votre propre fichier doit être capable de trancher :
Token specimen · real values
Sage & Slate Editorial
Live renderSage & Slate Editorial's actual tokens — the same values its exports use.
Color tokens
Sage & Slate Editorial
Core
background
H 70 · C1, 0, 5, 7
foreground
H 84 · C7, 0, 17, 88
card
H 60 · C0, 0, 2, 4
muted
H 70 · C1, 0, 5, 10
border
H 69 · C1, 0, 6, 16
Brand
primary
H 119 · C45, 0, 46, 47
primary-fg
H 0 · C0, 0, 0, 100
secondary
H 213 · C59, 33, 0, 33
accent
H 49 · C0, 7, 39, 20
ring
H 119 · C45, 0, 46, 47
Semantic
destructive
H 0 · C0, 68, 68, 21
destructive-fg
H 0 · C0, 0, 0, 0
success
H 119 · C45, 0, 46, 47
warning
H 41 · C0, 22, 68, 31
muted-fg
H 80 · C4, 0, 13, 64
Charts
chart-1
H 119 · C45, 0, 46, 47
chart-2
H 213 · C59, 33, 0, 33
chart-3
H 49 · C0, 7, 39, 20
chart-4
H 120 · C27, 0, 27, 34
chart-5
H 71 · C8, 0, 41, 74
Typography
Sage & Slate Editorial
Scale: major-third
Density: relaxed
Heading · Plus Jakarta Sans · 2.5rem
Sample headline
Subheading · Plus Jakarta Sans · 1.875rem
A warm organic editorial UI kit on a sage-green canvas with generous rounded cards, eyebrow accent chips, and a soft photography-forward layout.
Body · DM Sans · 1rem
A warm editorial system built on a sage-green page background with floating off-white cards that carry large border-radius and soft shadows. Bold geometric headings open with inline eyebrow accent chips, and generous whitespace defines the rhythm. The palette draws from nature: forest greens, dusty blues, and warm wheats, applied as accents on a near-neutral sage canvas. Ideal for photography, lifestyle, wellness, and editorial content surfaces.
Mono · Space Mono · 0.8125rem
npx shadcn add sageslateeditorial.json
Aa
Plus Jakarta Sans · Heading
Aa
DM Sans · Body
ABCDEFGHIJKLM NOPQRSTUVWXYZ
abcdefghijklmnopqrstuvwxyz
0123456789 & @ # % →
Tokens
Sage & Slate Editorial primitives
Radius scale
Component radius
Elevation
Spacing · base 1rem
Comment rédiger une interdiction efficace
Toutes les interdictions ne se valent pas. Trois propriétés distinguent celles qui modifient le résultat de celles qui sont ignorées.
| Faible | Fort | Pourquoi | |
|---|---|---|---|
| Spécificité | "Évitez les styles trop décoratifs" | "Pas de dégradés, pas d'ombres portées, pas de bordures décoratives" | Un modèle ne peut pas évaluer ce qui est "trop" |
| Vérifiabilité | "Gardez une typographie sobre" | "N'utilisez jamais de font-weight supérieur à 600" | L'un peut être recherché via grep ; l'autre non |
| Alternative proposée | "N'utilisez pas de box-shadow" | "Pas de box-shadow — l'élévation est un niveau de surface plus une bordure de 1px" | Interdire sans remplacer laisse le modèle inventer un substitut |
C'est la troisième ligne qui est oubliée. Une interdiction sans alternative crée un vide que le modèle doit combler, et il le fait en puisant dans la même distribution d'entraînement que celle que vous essayiez d'éviter. Chaque "jamais X" devrait être suivi d'un "à la place, Y".
Structure et longueur
Le fichier doit tenir dans le contexte aux côtés de la tâche réelle, ce qui impose un plafond concret. Environ 400 lignes constituent un objectif viable ; au-delà, les règles individuelles perdent l'attention au profit de la tâche.
L'ordre compte également. Placez l'intention et les interdictions au début. Un modèle lisant de haut en bas rencontre la règle générale avant le cas particulier, ce qui correspond à l'ordre utilisé par Stripe dans son Appearance API — le thème d'abord, puis les variables, puis les règles spécifiques.
# DESIGN.md
## Intent <- who reads this product, and what it is for
## Never <- the prohibitions, early and unmissable
## Colour <- roles for light and dark, referencing tokens
## Type <- scale with real numbers, weight band, tracking
## Spacing & density <- the scale, and which surface uses which step
## Elevation <- the strategy, stated once
## Composition <- how components sit together
## Motifs <- what makes this design specifically oursSi votre produit possède des surfaces réellement différentes — un site marketing et un tableau de bord dense — n'écrivez pas un seul fichier avec des nuances. "Espacement généreux, bien que les tableaux puissent être plus denses" sont deux règles qui prétendent n'en former qu'une, et le modèle doit choisir. Rédigez un fichier racine pour ce qui ne varie jamais et des fichiers par surface pour ce qui varie.
Ce qui doit aller dans un serveur
Tout ne doit pas figurer dans le fichier ; tenter de tout y mettre est ce qui le rend trop volumineux pour être utile. La ligne de démarcation est de savoir si l'agent en a besoin avant de décider ou seulement à la demande.
| Quoi | Pourquoi | |
|---|---|---|
| APIs de composants, props, variantes | Serveur | Volumineux, change souvent, nécessaire uniquement une fois le composant choisi |
| Catalogue d'icônes | Serveur | Des centaines de noms, nécessaires un par un |
| Rôles de couleurs, échelles, densité | Fichier | Nécessaire avant la première décision, à chaque fois |
| Interdictions | Fichier | Un agent ne pense jamais à demander ce qui est interdit — il doit déjà le savoir |
Le serveur MCP Carbon d'IBM est un bon modèle pour la première colonne : il expose la recherche de documentation, des exemples de code de composants, des graphiques et des composants expérimentaux sous forme d'outils. Notablement, aucun de ces éléments n'est une interdiction — car un outil de récupération ne fait remonter que ce que l'agent a pensé interroger. Plus d'informations sur cette séparation.
Tester si cela fonctionne
Rédiger le fichier et supposer que cela fonctionne est le meilleur moyen pour les équipes de découvrir le problème trois semaines plus tard. Quatre vérifications, par ordre croissant d'effort.
- 1
Rechercher les valeurs de couleur littérales via grep
Si l'agent respecte les rôles sémantiques, aucune valeur hexadécimale ne devrait se trouver en dehors de votre fichier de tokens.
grep -rn --include='*.tsx' --include='*.css' -E '#[0-9a-fA-F]{3,8}\b' src \ | grep -v 'tokens\|globals.css' - 2
Rechercher les graisses de police interdites via grep
La graisse est l'endroit où la hiérarchie revient discrètement aux valeurs par défaut ; c'est le signal le plus rapide pour savoir qu'une interdiction n'est pas appliquée.
grep -rn --include='*.tsx' -E 'font-(bold|extrabold|black)' src | head -30 - 3
Demander le même écran deux fois, dans des sessions distinctes
La cohérence entre les sessions est le véritable test. Si deux exécutions diffèrent significativement sur l'espacement, le rayon des bordures ou la hiérarchie, c'est que le fichier ne contraint pas assez — et le diff vous indique précisément quelle section manque.
- 4
Construire d'abord un écran en mode sombre
Si le mode sombre a été déduit plutôt que défini, c'est ici qu'il apparaîtra. Il est bien moins coûteux de s'en rendre compte sur le premier écran que sur le vingtième.
Les deux premiers tests doivent être intégrés à la CI. Un contrôle qui rejette une pull request contenant une valeur hexadécimale brute fait plus pour la cohérence à long terme que n'importe quelle documentation, conclusion à laquelle sont parvenus Salesforce avec le linter du SLDS et Stripe en supprimant complètement cette possibilité.
Les kits de design Identity Forge intègrent cette structure nativement : 28 rôles de couleurs sémantiques pour les modes clair et sombre, des échelles de typographie et d'espacement, l'élévation, des motifs et des consignes explicites (do's and don'ts), le tout sérialisé dans un DESIGN.md. Parcourir les kits ou lire comment générer un DESIGN.md.
Puis-je simplement orienter mon agent IA vers mon site de documentation du design system ?
C'est rarement efficace. Un site se parcourt page par page, est organisé par composant et décrit l'intention sous forme de prose. Un agent a besoin des décisions en contexte avant de choisir un composant, organisées par décision plutôt que par composant, avec des contraintes formulées comme des règles vérifiables. Un fichier dans le dépôt répond à ce besoin ; un site non.
Quelle longueur doit avoir un DESIGN.md ?
Environ 400 lignes constituent un plafond viable. Il doit partager le contexte avec la tâche réelle, et au-delà de ce point, les règles individuelles commencent à perdre en importance. S'il s'allonge, cela signifie généralement qu'il couvre plusieurs surfaces à la fois et qu'il devrait être divisé en un fichier racine et des fichiers par surface.
Quelle est la section la plus importante ?
Les interdictions. 76 % des fichiers de design publiés n'en contiennent aucune, alors que la différence entre votre interface et une interface générique réside principalement dans l'ensemble des choses que vous ne faites jamais. Quinze minutes passées à rédiger une section « Ne jamais » modifient le résultat plus que n'importe quelle autre section de longueur comparable.
Dois-je mettre mes valeurs de tokens dans le fichier de design ?
Non — faites-y référence. Dès qu'une valeur existe à deux endroits, l'un sera mis à jour et l'autre non, et le modèle utilisera avec assurance la version obsolète. Indiquez le rôle et son application ; laissez le fichier de tokens gérer la valeur.
Ai-je toujours besoin d'un site de documentation si j'ai un DESIGN.md ?
Oui, pour les humains et pour les détails de l'API des composants, trop volumineux pour un fichier. Les deux ne sont pas concurrents : le site documente ce qui existe en profondeur, le fichier énonce les décisions dont un agent a besoin avant de commencer. Les catalogues de composants volumineux sont mieux servis par un serveur MCP que par l'un ou l'autre.