Cap 6: Skills de Implementación y Review

Por: Artiko
gstackcode-reviewdebuggingreviewcodex

El problema del code review con IA

El código que genera IA tiende a ser sintetizable pero no necesariamente correcto en producción. pasa CI pero rompe con:

Los skills de implementación de gstack atacan exactamente estos puntos ciegos.

/review

Staff engineer en modo paranóico. El foco está en bugs que pasan tests pero rompen producción.

Categorías que inspecciona:

mindmap
  root[/review/]
    Correctness
      N+1 queries
      Race conditions
      Edge cases no cubiertos
    Seguridad
      Trust boundaries
      Input validation gaps
      Privilege escalation paths
    Arquitectura
      Acoplamiento incorrecto
      Violaciones de capas
      Enum handlers incompletos
    Datos
      Migraciones inseguras
      Schema changes destructivas
      Rollback imposible

Proceso:

  1. Lee el diff o el código indicado
  2. Auto-corrige issues mecánicos con commits atómicos
  3. Escala issues ambiguos al desarrollador con contexto claro

Qué NO hace: No refactoriza por preferencia estética. Solo corrige bugs reales y problemas de seguridad.

Ejemplo de output:

❌ CRÍTICO: La query en UserRepository.findByEmail() no usa
   índice — carga completa de tabla con 50k+ registros.
   Fix: CREATE INDEX idx_users_email ON users(email);

⚠️  WARN: El rate limiter en /api/auth/login usa memoria
   local — no funciona con múltiples instancias del server.
   Fix recomendado: Redis con sliding window.

✅ AUTO-FIXED: 3 console.log de debug eliminados (commits
   a1b2c3d, e4f5g6h, i7j8k9l)

/investigate

Debugger sistemático que sigue la “Ley de Hierro”: sin fix sin investigación de causa raíz.

Principio central:

No implementes un fix hasta entender exactamente por qué falla. Si no entiendes la causa, el fix es una suposición.

Proceso de investigación:

flowchart TD
    BUG[Bug reportado] --> TRACE[Rastrear data flow]
    TRACE --> HYP[Formular hipótesis]
    HYP --> TEST[Probar hipótesis]
    TEST --> FOUND{¿Causa encontrada?}
    FOUND -->|Sí| FIX[Implementar fix]
    FOUND -->|No - 1er intento| HYP
    FOUND -->|No - 3er intento| ARCH[Cuestionar arquitectura]
    ARCH --> USER[Escalar al usuario]

Límite de 3 intentos fallidos:

Si después de 3 hipótesis testeadas no se encuentra la causa, el skill detiene la investigación y escala. El razonamiento: si 3 hipótesis sistemáticas fallan, probablemente hay un problema arquitectónico más profundo que requiere decisión humana.

Qué produce:

/codex

Segunda opinión de OpenAI Codex sobre el mismo código.

Por qué dos modelos:

3 modos de operación:

ModoDescripciónCuándo usarlo
Pass/FailGate de calidad binario: ¿el código es apto para producción?Antes de mergear PRs críticos
AdversarialIntenta activamente encontrar vulnerabilidades y exploitsCódigo de autenticación, payments, datos sensibles
ConsultationConsulta abierta sobre arquitectura o decisiones de diseñoCuando quieres explorar trade-offs

Cross-model analysis:

Cuando tanto /review (Claude) como /codex (OpenAI) han revisado el mismo branch, gstack genera un análisis cruzado:

Findings compartidos (alta confianza):
  - Race condition en processPayment() — ambos models coinciden

Findings solo en Claude:
  - N+1 en getUsers() — posiblemente aceptable según el contexto

Findings solo en Codex:
  - Missing CSRF token en form de settings — revisar

Los findings compartidos son prácticamente certeros. Los únicos requieren juicio.

Cuándo usar cada skill

flowchart LR
    DONE[Código listo] --> REV[/review/]
    REV --> BUG{¿Bug encontrado?}
    BUG -->|No reproducible| INV[/investigate/]
    BUG -->|Fix claro| FIX[Fix + commit]
    INV --> ROOT[Causa raíz]
    ROOT --> FIX
    FIX --> CODEX{¿Código crítico?}
    CODEX -->|Sí: auth/payments/data| CDX[/codex/ adversarial]
    CODEX -->|No| QA[/qa/]
    CDX --> QA

Integración con el flujo de PR

El workflow típico en un PR:

# 1. Review automático
/review

# 2. Segunda opinión para código crítico
/codex

# 3. Si hay bugs no reproducibles
/investigate "El test de integración falla en CI pero no local"

# 4. Cuando todo esté limpio
/qa
/ship