Cuando cada cambio pequeño tiene un blast radius

La primera etapa del vibe coding se siente absurdamente productiva. Cursor y Claude Code pueden generar login, dashboard, settings y push notifications tan rápido que un solo founder puede tener un MVP en producción en cuestión de días.

El problema aparece en la segunda o tercera ronda de cambios. Un ajuste pequeño en settings rompe auth. Una actualización del perfil desajusta las push notifications. Los bugs parecen no estar relacionados, pero el código no tiene límites impuestos, así que cada parte de la app puede afectar a cualquier otra.

Esta es la trampa del vibe coding. Cursor y Claude Code son increíbles generando código que funciona. No están diseñados para generar código mantenible. Cuando le pides a Claude una pantalla de settings, genera una pantalla de settings. No genera una pantalla de settings que respete tus boundaries de servicio, siga tu theme contract y valide sus inputs. Él rellena el prompt. Tú rellenas el hueco.

Por qué el vibe coding se rompe al escalar

Cuando tienes diez usuarios, un edge case roto es un DM por el que todavía puedes disculparte. Cuando tienes mil, es un evento de churn. Cuando tienes diez mil, es una caída que amenaza a la empresa. La misma codebase que se sentía mágica en la etapa MVP se vuelve aterradora en la etapa de crecimiento.

El desarrollo tradicional resuelve esto con code reviews, ADRs y senior engineers que dicen “no”. Pero cuando lanzas con Cursor y Claude Code a velocidad 10x, no puedes permitirte un cuello de botella humano en cada loop de verificación. Ese cuello de botella anula la ventaja de velocidad. Necesitas algo más rápido que una review humana y igual de fiable.

Restricciones declarativas: la respuesta

Guardrails: comprobaciones deterministas y declarativas que corren en milisegundos. No se cansan. No pierden contexto. No cuestan tokens. Son el sistema inmunitario arquitectónico de tu app hecha con vibe coding:

// These aren't suggestions. They're non-negotiable gates.
// They run on every commit. Human or AI code — doesn't matter.

1. TypeScript strict mode catches interface violations
   - noUncheckedIndexedAccess
   - exactOptionalPropertyTypes

2. ESLint catches architectural violations
   - no className outside primitive seam
   - import from barrels, not implementations

3. dependency-cruiser catches boundary violations
   - Circular dependencies caught at commit time
   - Never reach production

4. Pre-commit hooks run ALL checks before code lands
   pnpm run verify → lint, typecheck, depcruise, test
   If any check fails, the commit is blocked.

El costo de saltarte los guardrails

Sin guardrails, el código generado por IA sigue una espiral de muerte predecible: generar rápido, lanzar rápido, romper rápido, depurar con pánico en producción, perder usuarios, perder sueño, perder confianza. He visto equipos gastar sprints enteros arreglando código generado por IA que una sola regla de ESLint habría evitado. El tiempo que ahorraron con vibe coding en la semana uno lo perdieron multiplicado por diez en la semana diez.

Con guardrails, el ciclo cambia: generar rápido, validar rápido, lanzar con seguridad. Cursor y Claude Code siguen escribiendo el código. Los guardrails hacen cumplir los límites. Obtienes velocidad de IA con seguridad arquitectónica.

Cómo son los guardrails listos para producción

En una arquitectura React Native lista para producción, los guardrails forman parte de los cimientos:

  • TypeScript strict mode desde el día uno: noUncheckedIndexedAccess, exactOptionalPropertyTypes
  • dependency-cruiser hace cumplir boundaries de carpetas y evita dependencias circulares
  • ESLint bloquea className fuera del seam de primitivas de estilo
  • Hooks de pre-commit ejecutan la suite completa de verificación en cada commit

El resultado: el código generado por IA se mantiene dentro de los límites. Cursor genera componentes, pantallas y hooks a toda velocidad. Pero no puede violar boundaries de servicio. No puede filtrar motores de estilo. No puede crear dependencias circulares. Los guardrails dicen qué está permitido. La IA rellena los huecos.

La transición sin fricción

El Autotomy Expo Starter Pack se construyó exactamente para esta transición:

  • Interfaces de servicio definidas con barrel exports
  • Composition root para la gestión de dependencias
  • Primitivas de UI semánticas con un theme contract
  • Boundaries de dependencias hard y opcionales
  • Gestión centralizada del lifecycle
  • Validación de URL en los boundaries de ruta
  • Guardrails deterministas de pre-commit
  • El patrón de autotomy para refactorizar con seguridad

No dejas de hacer vibe coding. Haces vibe coding sobre una base que escala. Cursor genera pantallas contra tu theme contract. Claude Code genera features contra tus interfaces de servicio. Tus hooks de pre-commit detectan violaciones de boundaries antes de que lleguen a producción. Tu app pasa de diez usuarios a diez mil sin el colapso arquitectónico que mata a la mayoría de los proyectos codificados con IA.

La velocidad es valiosa. La estructura es lo que hace que esa velocidad sea sostenible. Si estás lanzando una app React Native con Cursor y Claude Code, invierte en guardrails antes de necesitarlos. Son más baratos que refactorizar, y se pagan solos la primera vez que atrapan un cambio rompedor en el commit en vez de en las manos de tus usuarios.