Por Qué las Reglas Son el Arma Secreta
de la Revisión de Código con IA
Cómo las reglas estructuradas transforman la revisión de código con IA de sugerencias inconsistentes a resultados deterministas y predecibles
Si alguna vez has intentado usar ChatGPT o Claude para revisión de código, probablemente hayas experimentado esto: el mismo código recibe retroalimentación diferente dependiendo de cómo formules tu pregunta, qué conversación hubo antes, o qué humor parece tener la IA ese día. Esa inconsistencia no es solo molesta — es un problema fundamental que hace que la revisión de código con IA no sea confiable para uso en producción.
En diffray, resolvimos esto con reglas estructuradas. Déjame mostrarte por qué son la clave para que la revisión de código con IA realmente funcione.
El Problema: La Dilución de Contexto Mata el Rendimiento de la IA
Cuando vuelcas un PR completo en un LLM con un prompt como "revisa este código", varias cosas salen mal:
La señal se ahoga en el ruido
La IA intenta verificar seguridad, rendimiento, pruebas, documentación, estilo — todo a la vez. ¿El resultado? Análisis superficial que pasa por alto problemas críticos.
El efecto del "medio perdido"
La investigación muestra consistentemente que la información en el medio de contextos largos se ignora. Tu archivo más importante podría estar enterrado donde la IA no puede procesarlo efectivamente.
Resultados inconsistentes
Ejecuta la misma revisión dos veces, obtén hallazgos diferentes. Eso no es aceptable para una herramienta de la que dependen los equipos.
Explosión de falsos positivos
Sin enfoque, la IA marca patrones genéricos que realmente no son problemas en tu codebase. Los estudios muestran que los enfoques de volcado de contexto producen tasas de falsos positivos del 60-80%.
La Solución: Reglas Estructuradas
Una regla estructurada no es solo un prompt — es una especificación completa que le dice a la IA exactamente qué buscar, dónde buscar y cómo reportar hallazgos.
Así es como se ve una regla:
rules:
- id: sec_sql_injection
agent: security
title: "Inyección SQL vía concatenación de strings"
description: "Input de usuario concatenado en queries SQL permite ejecutar SQL arbitrario"
importance: 9
match:
file_glob:
- "src/api/**/*.ts"
- "src/routes/**/*.ts"
- "!**/*.test.ts"
content_regex:
- "query.*\$\{|\+.*query"
checklist:
- "Encuentra todos los lugares donde se usa input de usuario en queries SQL"
- "Verifica si se usan queries parametrizadas o prepared statements"
- "Verifica que NO se use concatenación de strings para construir queries"
examples:
bad: |
const query = `SELECT * FROM users WHERE id = ${userId}`;
await db.execute(query);
good: |
const query = 'SELECT * FROM users WHERE id = ?';
await db.execute(query, [userId]);Esta estructura habilita tres capacidades críticas que hacen que la revisión de código con IA realmente funcione.
1. Resultados Deterministas Mediante Targeting Preciso
¿Notas la sección match? Eso es pattern matching que determina cuándo se ejecuta la regla.
Sin pattern matching, revisar un PR de 50 archivos significa analizar todos los 50 archivos para cada posible problema. Con pattern matching:
Sin pattern matching
- 50 archivos × todas las reglas = prompt masivo
- ~500,000 tokens por revisión
- Resultado: Lento, costoso, sin enfoque
Con pattern matching
- 5 archivos API × reglas de seguridad API
- ~50,000 tokens por revisión
- Resultado: Rápido, económico, preciso
90%
Ahorro de tokens mediante pattern matching preciso
Si un PR tiene 5 archivos API que contienen queries SQL, solo esos 5 archivos se envían para verificación de inyección SQL. La IA ve exactamente lo que necesita evaluar — nada más.
Esta precisión elimina la aleatoriedad que plagaba los intentos anteriores de revisión de código con IA. Mismo código + mismas reglas = mismos hallazgos. Siempre.
2. Arquitectura Multi-Agente: El Experto Correcto para Cada Problema
Aquí es donde se pone interesante. diffray no usa una IA para revisar todo — usa 31 agentes especializados, cada uno enfocado en lo que hace mejor:
Experto en Seguridad
Vulnerabilidades, autenticación, exposición de datos
Especialista en Rendimiento
Queries N+1, memory leaks, cuellos de botella
Cazador de Bugs
Null pointers, condiciones de carrera, edge cases
Agente React
Patrones de hooks, ciclo de vida, gestión de estado
Agente TypeScript
Type safety, generics, patrones de strict mode
Asesor de Arquitectura
Patrones de diseño, acoplamiento, escalabilidad
Cada agente tiene un system prompt especializado con expertise de dominio. Un agente de seguridad conoce OWASP Top 10. Un agente React entiende las reglas de hooks. Esta especialización mejora dramáticamente la calidad de detección.
Pero aquí está la clave: las reglas determinan qué agente maneja qué.
- id: react_useeffect_cleanup
agent: react # Manejado por especialista React
match:
file_glob: ["**/*.tsx"]
content_regex: ["useEffect"]
checklist:
- "Verifica si useEffect retorna una función de cleanup"
- "Verifica que los event listeners y subscriptions se limpien"Esta regla solo va al agente React, solo para archivos TSX, solo cuando useEffect está presente. El agente recibe contexto enfocado sobre exactamente una cosa — no 50 preocupaciones diferentes compitiendo por atención.
3. Curación de Contexto: El Secreto para No Diluir la Atención de la IA
Los LLMs modernos pueden manejar más de 200k tokens. Pero la investigación muestra que el rendimiento práctico alcanza un tope alrededor de 25-30k tokens para razonamiento complejo. Más allá de eso, estás pagando por tokens que el modelo no puede usar efectivamente.
El sistema de gestión de contexto de diffray asegura que cada agente reciba precisamente la información que necesita:
| Agente | Recibe | Excluye |
|---|---|---|
| Experto en Seguridad | Flujos de auth, endpoints API, manejo de datos | Componentes UI, estilos |
| Especialista en Rendimiento | Hot paths, bucles, estructuras de datos | Documentación, configs |
| Agente React | Componentes, hooks, gestión de estado | Código backend, SQL |
Cada agente recibe exactamente lo que necesita para hacer su trabajo. Nada más. El resultado: atención enfocada, mejores hallazgos, menos falsos positivos.
4. Flexibilidad: Reglas Específicas de Proyecto y Equipo
Aquí es donde las reglas realmente brillan para equipos. Cada codebase tiene convenciones que las herramientas genéricas desconocen:
Tus librerías internas:
- id: use_internal_http_client
agent: consistency
title: "Usar wrapper interno de cliente HTTP"
match:
file_glob: ["src/**/*.ts"]
content_regex: ["\\bfetch\\(", "axios\\."]
checklist:
- "Encuentra llamadas raw de fetch() o axios"
- "Verifica si el código debería usar httpClient de @/lib/http-client"
examples:
bad: |
const response = await fetch('/api/users');
good: |
import { httpClient } from '@/lib/http-client';
const data = await httpClient.get('/api/users');Tus patrones específicos de dominio:
- id: money_use_decimal
agent: bugs
title: "Usar Decimal para valores monetarios"
match:
content_regex: ["(price|amount|total)\\s*:\\s*(number|float)"]
checklist:
- "Encuentra campos monetarios usando tipos float/number"
- "Verifica que el almacenamiento use centavos (integer) o tipo Decimal"Tus requisitos de cumplimiento:
- id: pii_logging_check
agent: compliance
title: "Nunca loguear PII directamente"
tags: [compliance-gdpr, compliance-hipaa]
match:
content_regex: ["log.*(email|phone|ssn|password)"]Colócalas en .diffray/rules/ y estarán activas en el próximo PR. Sin cambios de infraestructura, sin actualizaciones de herramientas — solo agrega YAML y tu revisor de IA aprende tus estándares.
¿Por Qué YAML? La Estructura Habilita la Inteligencia
Podrías preguntarte por qué usamos YAML estructurado en lugar de solo escribir prompts. La estructura habilita capacidades que los prompts de forma libre no pueden:
Pattern Matching y Filtrado
La sección match se procesa antes de que algo vaya a la IA. Esto sucede en código, no en prompts — es determinista, rápido y preciso.
Organización Semántica
Las reglas tienen id, agent, importance, tags. Esto permite filtrado ("Solo ejecutar reglas de seguridad en este PR"), priorización ("Mostrar problemas críticos primero") y reportes ("¿Cuántos problemas de seguridad vs. calidad?").
Control de Versiones y Revisión
Las reglas son código. Viven en tu repo, pasan por revisión de PR, tienen historial de git. Cuando alguien pregunta "¿por qué la IA marca esto?", la respuesta está en un archivo YAML que cualquiera puede leer.
Uso Entre Fases
Diferentes partes de una regla se usan en diferentes fases: match para filtrado de archivos (sin necesidad de IA), checklist + examples para revisión con IA, id + importance para deduplicación y priorización.
Un prompt plano no puede proporcionar esta separación de responsabilidades.
El Resultado: Revisión de Código con IA que Realmente Funciona
Cuando combinas reglas estructuradas con arquitectura multi-agente y gestión inteligente de contexto, obtienes:
Resultados deterministas
Mismo código, mismas reglas, mismos hallazgos
Análisis enfocado
Cada agente hace una cosa excepcionalmente bien
Bajos falsos positivos
El matching preciso elimina el ruido
Personalización de equipo
Agrega tus estándares sin cambios de infraestructura
Esto es lo que marca la diferencia entre "revisión de código con IA" como demo y revisión de código con IA como infraestructura en la que tu equipo realmente confía.
Vélo en Acción
Instala diffray y abre un PR. Es gratis para repos públicos e incluye un generoso tier gratuito para repos privados.