Aller au contenu

Garde-fous pour l'IA

Un règlement que votre assistant lit avant d'écrire, des vérifications qui arrêtent ce qui passe entre les mailles, des messages d'erreur qui lui disent comment corriger son propre code, et une commande qui lui dit quand le travail est terminé.

En bref

  • CLAUDE.md et AGENTS.md renvoient votre assistant vers dix fichiers de conventions.
  • 17 règles de lint maison et un TypeScript strict bloquent les erreurs les plus fréquentes des assistants.
  • Votre assistant vérifie son propre travail avec yarn verify avant d'annoncer qu'il a terminé.

Un règlement que votre assistant lit d'abord

CLAUDE.md réunit les décisions produit, la définition de « terminé », les règles maison, les commandes et les pièges connus en quatre-vingts lignes environ. AGENTS.md y renvoie pour les assistants qui cherchent ce nom, et il pointe vers dix fichiers qui détaillent les règles de chaque domaine.

  • Stack, outillage, style de code, front, back, design system, tests, CI, sécurité, connexion et facturation
  • Une fonctionnalité d'exemple complète montre chaque règle appliquée, prête à copier
CLAUDE.md
  • AGENTS.md→ CLAUDE.md
  • CLAUDE.md
  • docs/conventions/
  • 01-stack.md
  • 02-monorepo-and-tooling.md
  • 03-code-style.md
  • 04-frontend.md
  • 05-backend.md
  • 06-design-system.md
  • 07-testing.md
  • 08-ci-and-git-workflow.md
  • 09-security.md
  • 10-auth-and-billing.md

## House rules

  • Short `//` comments only, never JSDoc; comment WHY, never WHAT.
  • Named exports only. Functional components only. One exported thing per util/hook/constant/type file.
  • Imports through aliases (`@/`, `~/`, `src/`), never `../`. No barrel files in `app-front`.
  • Exhaustive `switch` over unions ends with `default: assertUnreachable(value)`.
  • Icons only from `app-ui/icon`, never `@tabler/icons-react`; use the canonical icon from the icon dictionary.

17 règles pour les erreurs des assistants

Les règles maison tournent avec oxlint à chaque modification, à côté d'un TypeScript strict et des tests. Pas d'avertissements : une règle est appliquée ou supprimée.

  • Sécurité : chaque endpoint protégé, les données d'un espace de travail uniquement via son repository
  • Cohérence : des noms, des fichiers et des dossiers là où chacun les attend
  • Design : des couleurs issues du thème, jamais tapées à la main

API et données4

  • app/graphql-resolvers-should-be-guarded
  • app/rest-api-methods-should-be-guarded
  • app/prefer-workspace-scoped-repository
  • app/enforce-module-boundaries

React5

  • app/component-props-naming
  • app/effect-components
  • app/matching-state-variable
  • app/no-state-useref
  • app/no-navigate-prefer-link

Styles3

  • app/styled-components-prefixed-with-styled
  • app/sort-css-properties-alphabetically
  • app/no-hardcoded-colors

Fichiers et noms4

  • app/max-consts-per-file
  • app/types-folder-filename
  • app/no-miscased-acronym-in-identifier
  • app/folder-structure

Accessibilité1

  • app/no-storybook-a11y-disable

Des erreurs qui expliquent la correction

Chaque règle dit quoi changer et pourquoi, en un seul message. Un assistant qui le lit corrige son propre code sans deviner, et vous aussi.

  • Certaines règles corrigent même le code toutes seules, comme l'ordre des propriétés CSS
  • La CI lance les mêmes vérifications sur chaque pull request
npx nx lint
@InjectRepository(ProjectEntity)project.service.ts:18:5 error app(prefer-workspace-scoped-repository): Use @InjectWorkspaceScopedRepository(ProjectEntity) instead of @InjectRepository(ProjectEntity): the workspace-scoped repository adds the workspaceId to every read and write, so one workspace can never read or change the data of another. If ProjectEntity is not owned by a workspace, add an exemption with its reason to the lint config.
@Mutation(() => ProjectDto)project.resolver.ts:64:3 error app(graphql-resolvers-should-be-guarded): GraphQL resolver `archiveProject` has no permission guard. Add a *PermissionGuard (for example SettingsPermissionGuard(...)) with @UseGuards on the method or its class: every endpoint must state which permission it requires. Use NoPermissionGuard to declare explicitly that none is needed.
const countRef = useRef(0);ProjectList.tsx:12:20 error app(no-state-useref): useRef is reserved for DOM elements, typed as such: useRef<HTMLDivElement>(null). A ref change does not re-render the component, so state kept in a ref leaves the screen out of date; use useState or an atom instead.

Du prompt à la vérification réussie

Votre assistant écrit une couleur en dur, la règle de lint l'arrête, l'assistant lit le message, utilise une variable du thème à la place et la vérification passe. La même boucle vaut pour chaque règle.

Une commande dit quand c'est terminé

yarn verify vérifie ce qui a changé, les vérifications les plus rapides d'abord : mots interdits, lint et formatage, fichiers générés, traductions, types, tests unitaires et migration de la base. Il se termine par « All checks passed », ou par chaque échec et la façon de le corriger.

  • Dans Claude Code, un hook passe au lint chaque fichier que l'assistant modifie, et un autre l'oblige à lancer yarn verify avant de rendre la main
  • Huit recettes pas à pas : un démarrage guidé, une fonctionnalité, une table, une page, les traductions, les tâches de fond, Clerk et Stripe, le déploiement
  • Cursor lit les mêmes règles dans .cursor/rules ; Codex et les autres, dans AGENTS.md
  • yarn verify:full vérifie tout, comme la CI : builds, tests de l'API, tests de bout en bout et stories du design system

Questions

Avec quels assistants fonctionne-t-il ?

Tout assistant qui lit CLAUDE.md ou AGENTS.md, comme Claude Code, Codex ou Cursor. Claude Code lance en plus les vérifications de lui-même, grâce à des hooks. Les vérifications sont les mêmes, quel que soit l'auteur du code.

Puis-je modifier ou retirer une règle ?

Oui, c'est votre code : chaque règle vit dans le dépôt avec ses tests. Modifiez les conventions et les réglages du lint ensemble, pour que le règlement et les vérifications disent toujours la même chose.

Dois-je encore relire le code ?

Oui. Les vérifications attrapent les règles enfreintes, pas les mauvaises décisions produit. Le guide se termine par la liste de ce qu'une personne doit encore vérifier.

Comment savoir si l'assistant a vraiment vérifié son travail ?

Son dernier message doit dire que yarn verify est passé. Un doute ? Lancez yarn verify vous-même : en quelques secondes à quelques minutes, il se termine par « All checks passed » ou par ce qu'il faut corriger.

Démarrez votre prochaine app sur une base propre

Payez une fois et obtenez tout le code source, avec toutes les mises à jour futures.