MISTAKES.md y Claude Code: convertir un error recurrente en una regla
Guía de entradas MISTAKES.md concisas, política de cero secretos, promoción a pruebas o reglas y verificación de barreras para Claude Code.
Al trabajar con Claude Code en repositorios complejos, el agente inevitablemente encuentra peculiaridades poco evidentes: definiciones TypeScript obsoletas, dependencias de ejecución ocultas o comportamientos específicos del bundler. Corregir el mismo error repetidamente en el chat desperdicia contexto y tiempo. En cambio, volcar transcripciones de sesión de varias páginas en las instrucciones llena el prompt y reduce la atención del modelo.
Un patrón práctico es mantener un MISTAKES.md ligero en la raíz del repositorio. Solo registra incidentes reproducibles, causas verificadas y acciones preventivas. Más tarde, estos se promueven a pruebas del proyecto, reglas de linter y configuración persistente.
1. MISTAKES.md frente a la transcripción de sesión
No confunda un registro de incidentes con una transcripción de terminal sin filtrar:
MISTAKES.md debe ser conciso para que Claude Code pueda ingerirlo al iniciar la sesión sin gastar demasiados tokens de contexto.
2. Anatomía de un registro de incidente
Cada entrada contiene cuatro campos obligatorios:
- Incident: qué se rompió exactamente y en qué condiciones: código de error, comando y herramienta.
- Impact: efecto posterior, como build roto, migración corrompida o suite de pruebas abortada.
- Root Cause: fuente técnica confirmada; si no está probada, márquela explícitamente como
[Hypothesis]. - Prevention: regla o comprobación concreta que impide que vuelva a suceder.
Ejemplo de registro
ERR-014: migración PostgreSQL falló al ejecutar DROP COLUMN sin CASCADE
- Incident: Claude Code ejecutó
ALTER TABLE orders DROP COLUMN customer_ref;en la migración 0042. - Impact: el despliegue de staging falló por la vista dependiente
v_active_orders. - Root Cause: las vistas que referencian tablas base requieren recreación explícita con cascade o actualizaciones previas.
- Prevention: toda migración DDL que elimine una columna debe comprobar las vistas dependientes mediante
pg_dependantes de ejecutarse.
3. Umbral de promoción: del registro a prueba o regla
No todo error tipográfico aislado merece una regla permanente. Promueva las entradas a barreras automatizadas con un umbral claro:
- Primera ocurrencia: añada un registro breve a
MISTAKES.md. - Segunda ocurrencia: si se detecta de forma determinista, escriba una prueba o regla de linter. Las barreras automatizadas superan a los prompts de texto.
- Comprobaciones no mecánicas: formule una regla negativa explícita en
CLAUDE.md, por ejemplo «No ejecutar nunca jest sin --runInBand en CI». - Archivado: cuando haya un test o hook desplegado, archive o elimine la entrada de
MISTAKES.mdpara evitar que el archivo crezca.
4. Verificación en la siguiente tarea
Para confirmar que funciona la nueva barrera:
- inicie una sesión nueva de Claude Code;
- proporcione un prompt que antes provocaba el fallo;
- revise si el agente respeta la regla o queda detenido por el hook pre-commit;
- si el agente elude instrucciones de texto, convierta la restricción en un wrapper de comando estricto o una comprobación automática.
Este bucle de retroalimentación convierte fallos de desarrollo aleatorios en una base de ingeniería robusta que mejora por sí misma.