MISTAKES.md et Claude Code : transformer une erreur répétée en règle
Guide pour des entrées MISTAKES.md concises, une politique zéro secret, le passage aux tests ou règles et la vérification des garde-fous Claude Code.
Dans un dépôt complexe, Claude Code rencontrera inévitablement des particularités peu visibles : définitions TypeScript obsolètes, dépendances d’exécution cachées ou comportements propres au bundler. Corriger la même erreur à répétition dans le chat gaspille contexte et temps. À l’inverse, placer des transcriptions de sessions de plusieurs pages dans les instructions encombre le prompt et dégrade l’attention du modèle.
Une approche pratique consiste à garder un MISTAKES.md léger à la racine du dépôt. Il ne contient que les incidents reproductibles, les causes vérifiées et les actions de prévention. Ces éléments sont ensuite promus vers les tests du projet, les règles de linter et la configuration persistante.
1. MISTAKES.md ou transcription de session
Ne confondez pas un journal d’incidents avec une transcription brute du terminal :
MISTAKES.md doit rester concis pour que Claude Code l’ingère au début d’une session sans consommer un volume excessif de tokens de contexte.
2. Anatomie d’un enregistrement d’incident
Chaque entrée contient quatre champs obligatoires :
- Incident : ce qui a cassé, et dans quelles conditions exactes : code d’erreur, commande, outil.
- Impact : effet en aval : build cassé, migration corrompue, suite de tests interrompue.
- Root Cause : source technique confirmée ; si elle ne l’est pas, la marquer explicitement
[Hypothesis]. - Prevention : règle ou vérification concrète qui empêche la répétition.
Exemple d’enregistrement
ERR-014 : échec d’une migration PostgreSQL lors d’un DROP COLUMN sans CASCADE
- Incident : Claude Code a exécuté
ALTER TABLE orders DROP COLUMN customer_ref;dans la migration 0042. - Impact : le déploiement de staging a échoué à cause de la vue dépendante
v_active_orders. - Root Cause : les vues qui référencent des tables de base exigent une recréation explicite avec cascade ou des mises à jour préalables.
- Prevention : toute migration DDL supprimant une colonne doit vérifier les vues dépendantes via
pg_dependavant exécution.
3. Seuil de promotion : du journal au test ou à la règle
Toute faute ponctuelle ne mérite pas une règle permanente. Promouvez les entrées vers des garde-fous automatisés avec un seuil clair :
- Première occurrence : ajoutez un enregistrement concis à
MISTAKES.md. - Deuxième occurrence : si le problème peut être détecté de façon déterministe, écrivez un test ou une règle de linter. Les garde-fous automatisés sont plus efficaces que les prompts textuels.
- Contrôles non mécaniques : formulez une règle négative explicite dans
CLAUDE.md, par exemple « Ne jamais exécuter jest sans --runInBand dans CI ». - Archivage : lorsqu’un test ou hook est déployé, archivez ou supprimez l’entrée de
MISTAKES.mdpour éviter que le fichier grossisse.
4. Vérifier lors de la tâche suivante
Pour confirmer que le nouveau garde-fou fonctionne :
- démarrez une nouvelle session Claude Code ;
- fournissez un prompt qui déclenchait auparavant l’échec ;
- vérifiez que l’agent respecte la règle, ou qu’il est arrêté par le hook pre-commit ;
- s’il contourne les instructions textuelles, transformez la contrainte en wrapper de commande strict ou en contrôle automatisé.
Cette boucle de retour transforme des échecs de développement aléatoires en une fondation d’ingénierie robuste et auto-améliorée.