Audits · août 2026Audit — pilier design-system

Audit — pilier design-system

Neuvieme tour de la rotation (docs/team/roster.md, @codebase-auditor). Lecture seule sur le code. Ce tour differe des six precedents : les six piliers restants ont ete audites en une passe, a la demande. La profondeur…

Neuvieme tour de la rotation (docs/team/roster.md, @codebase-auditor).

Lecture seule sur le code. Ce tour differe des six precedents : les six piliers restants ont ete audites en une passe, a la demande. La profondeur par pilier est donc moindre, et chaque document dit ou il s'arrete. La sonde commune est la meme partout : les invariants que le roster declare pour le pilier, parce que six tours ont montre que c'est la que l'ecart se loge.

Perimetre : src/components/**, src/styles/**, src/app/globals.css.

Etat du depot : origin/main a 3e23edb7, 27 aout 2026.

Ce qui a ete verifie

Interdit declareOccurrences
framer-motion0
react-hot-toast0
chart.js0
lottie-react0 (voir le releve)
@tailwind base/components/utilities (v3)0
SVG icon inline dans components/ui0
Modal / drawer / tooltip custom0 trouve
Stack canoniqueImports
lucide-react576
sonner90
@base-ui/react24
motion/react14
recharts7
Primitives components/ui/95 fichiers
Residuel Radix (ui/shadcn-compat/)7 fichiers

Aucun constat, et c'est le resultat

Le roster declare : « Registry-first, sans exception », suivi d'une liste de sept interdits. Les sept tiennent. Zero occurrence, sur tout src/, de chacune des bibliotheques bannies.

C'est le seul pilier de la rotation dont la regle est enoncee en absolu (« sans exception ») et tenue en absolu. Les six tours precedents ont trouve, a chaque fois, soit une regle absolue avec des exceptions reelles (ai-platform/0057, la regle AI Gateway), soit une regle nommant des choses introuvables (integrations/0061), soit une regle sans garde et violee (commerce-systems/0064). Ici : ni l'un ni l'autre.

La migration Radix → Base UI est elle-meme lisible : 24 imports @base-ui contre 7 fichiers de residuel isole dans ui/shadcn-compat/, un repertoire dont le nom dit ce qu'il est et ce qu'il deviendra.

Je n'ouvre pas d'item, pour la meme raison que sur marketplace : un item sans constat est du remplissage.

Releve, sans item

  • lottie-react : faux positif de ma propre sonde, corrige avant publication. Un grep litteral remonte 2 occurrences, mais ce sont des commentaires citant @lottiefiles/dotlottie-react, le paquet canonique, dont le nom interdit est un sous-mot. Et il n'est meme pas installe : le commentaire de team-carousel-card.tsx:367 dit que le fallback image tient « until @lottiefiles/dotlottie-react is wired up ». Zero violation. Note pour la prochaine sonde : lottie-react ne peut pas se chercher litteralement dans un depot qui utilise dotlottie-react.
  • Meme piege sur le compte de primitives. ls components/ui/*.tsx renvoie 0 ; les 95 fichiers vivent en sous-dossiers (ui/button/, ui/accordion/…). Une sonde a plat aurait publie « zero primitive ».

Ce que cet audit n'a pas couvert

  • La coherence visuelle elle-meme : c'est la mission declaree du pilier, et un grep ne la mesure pas. Aucune page n'a ete rendue, aucun token compare a son usage.
  • src/styles/** et globals.css — ouverts seulement pour l'interdit @tailwind base.
  • Les patterns, shells et modules de components/ : non lus.
  • La justification ecrite exigee pour tout composant custom, le roster l'impose ; je n'ai pas verifie qu'elle existe pour les composants qui n'ont pas d'equivalent registry.
  • L'accessibilite — hors sonde, entierement.