> ## Documentation Index
> Fetch the complete documentation index at: https://docs.devinenterprise.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Corregir automáticamente errores en la PR antes de hacer el merge

export const UseCaseHero = ({title, description, prompt, category, features, devinUrl, agent, intent, playbookId, type}) => {
  const encodedPrompt = encodeURIComponent(prompt || '');
  const tag = 'docs-use-case-gallery';
  const utm = 'utm_source=docs&utm_medium=use-case-gallery&utm_campaign=hero-cta';
  const agentParams = (agent ? '&agent=' + agent : '') + (intent ? '&intent=' + intent : '') + (playbookId ? '&playbookId=' + playbookId : '');
  const devinHref = type === 'schedule' ? 'https://app.devin.ai/settings/schedules/create?' + utm + agentParams + (prompt ? '&prompt=' + encodedPrompt : '') : type === 'review' ? 'https://app.devin.ai/review?' + utm : agent === 'ada' ? 'https://app.devin.ai/search?' + utm + '&noSubmit=true' + (prompt ? '&prompt=' + encodedPrompt : '') : devinUrl ? devinUrl.includes('?') ? devinUrl + '&' + utm + agentParams : devinUrl + '?' + utm + agentParams : prompt ? 'https://app.devin.ai/?tags=' + tag + '&' + utm + agentParams + '&prompt=' + encodedPrompt : 'https://app.devin.ai/?' + utm + agentParams;
  const buttonLabel = type === 'schedule' ? 'Schedule in Devin ↗' : type === 'review' ? 'Set Up Devin Review ↗' : agent === 'advanced' ? 'Try in Devin ↗' : agent === 'dana' ? 'Try in Dana ↗' : agent === 'ada' ? 'Try in Ask Devin ↗' : 'Try in Devin ↗';
  const featureList = features ? features.split(',').map(f => f.trim()) : [];
  return <div className="uc-hero">
      <div className="uc-hero-inner">
        <div className="uc-hero-left">
          <h1 className="uc-hero-title">{title}</h1>
          <p className="uc-hero-desc">{description}</p>
          <div>
            <a href={devinHref} target="_blank" rel="noopener noreferrer" className="try-in-devin-btn">
              {buttonLabel}
            </a>
          </div>
        </div>
        <div className="uc-hero-meta">
          <div className="uc-meta-item">
            <span className="uc-meta-label">Author</span>
            <span className="uc-meta-value">Cognition</span>
          </div>
          <div className="uc-meta-item">
            <span className="uc-meta-label">Category</span>
            <span className="uc-meta-value">{category}</span>
          </div>
          {featureList.length > 0 && <div className="uc-meta-item">
              <span className="uc-meta-label">Features</span>
              <span className="uc-meta-value">{featureList.join(', ')}</span>
            </div>}
        </div>
      </div>
    </div>;
};

export const PromptBlock = ({children, type, agent, intent, playbookId}) => {
  var utm = 'utm_source=docs&utm_medium=use-case-gallery&utm_campaign=prompt-block';
  var tag = 'docs-use-case-gallery';
  var agentParams = (agent ? '&agent=' + agent : '') + (intent ? '&intent=' + intent : '') + (playbookId ? '&playbookId=' + playbookId : '');
  var label = type === 'schedule' ? 'Schedule in Devin' : type === 'playbook' ? 'Create Playbook' : type === 'knowledge' ? 'Add to Knowledge' : agent === 'advanced' ? 'Try in Devin' : agent === 'dana' ? 'Try in Dana' : agent === 'ada' ? 'Try in Ask Devin' : 'Try in Devin';
  var buildUrl = function (text) {
    var encoded = encodeURIComponent(text);
    if (type === 'schedule') return 'https://app.devin.ai/settings/schedules/create?' + utm + agentParams + '&prompt=' + encoded;
    if (type === 'playbook') return 'https://app.devin.ai/settings/playbooks/create?' + utm + '&body=' + encoded;
    if (type === 'knowledge') return 'https://app.devin.ai/knowledge?' + utm + '&body=' + encoded;
    if (agent === 'ada') return 'https://app.devin.ai/search?' + utm + '&noSubmit=true&prompt=' + encoded;
    return 'https://app.devin.ai/?tags=' + tag + '&' + utm + agentParams + '&prompt=' + encoded;
  };
  const ref = React.useRef(null);
  const [href, setHref] = React.useState('#');
  React.useEffect(() => {
    if (!ref.current) return;
    var codeEl = ref.current.querySelector('pre code');
    if (codeEl) {
      var text = codeEl.textContent.trim();
      if (text) setHref(buildUrl(text));
    }
    var header = ref.current.querySelector('[data-component-part="code-block-header"]');
    if (header && !header.querySelector('.prompt-block-devin-link')) {
      var link = document.createElement('a');
      link.href = href;
      link.target = '_blank';
      link.rel = 'noopener noreferrer';
      link.className = 'prompt-block-devin-link';
      link.style.cssText = 'display:inline-flex;align-items:center;gap:6px;text-decoration:none;color:#fff;font-size:11px;font-weight:500;padding:4px 10px;border-radius:6px;white-space:nowrap;background:#317CFF;transition:background 0.2s;margin-left:8px;';
      link.innerHTML = '<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"/><polyline points="15 3 21 3 21 9"/><line x1="10" y1="14" x2="21" y2="3"/></svg> ' + label;
      link.onmouseenter = function () {
        link.style.background = '#2968D9';
      };
      link.onmouseleave = function () {
        link.style.background = '#317CFF';
      };
      header.appendChild(link);
    }
    var existingLink = ref.current.querySelector('.prompt-block-devin-link');
    if (existingLink && href !== '#') existingLink.href = href;
  });
  return <div className="prompt-block" ref={ref}>{children}</div>;
};

<UseCaseHero title="Corregir automáticamente errores en PR antes de hacer merge" description="Devin revisa cada PR para detectar errores y sube automáticamente las correcciones a la rama." category="Calidad del código" features="Integraciones" type="review" />

<div className="uc-detail-wrapper">
  <Tip>¿No quieres configurar esto manualmente? Pega un enlace a esta página en una sesión de Devin y pídele que lo configure todo por ti.</Tip>

  <Steps>
    <Step title="Inscribir repos y usuarios para revisión automática">
      Devin Review puede revisar automáticamente cada pull request (PR) en tus repositorios, sin necesidad de iniciarlas manualmente. Empieza inscribiendo los repos y usuarios que quieras cubrir.

      1. Ve a [Settings > Review](https://app.devin.ai/settings/review?utm_source=docs\&utm_medium=use-case-gallery) en la aplicación web de Devin.
      2. En **Repositories**, usa **Add repo** para buscar y añadir los repos que quieres que Devin revise automáticamente (por ejemplo, `acme/frontend`, `acme/api-server`).
      3. En **Users**, consulta quién está inscrito: cada usuario se inscribe por su cuenta configurando su activador de revisión personal.

      Una vez inscritos, Devin revisa automáticamente las PR cuando se abren, cuando se envían nuevos commits o cuando un borrador se marca como listo para revisión.

      <Tip>
        Cualquier miembro del equipo con una cuenta de GitHub conectada puede autoinscribirse para revisiones automáticas, sin necesidad de permisos de administrador. Ve a [Settings > Preferences](https://app.devin.ai/settings/preferences?utm_source=docs\&utm_medium=use-case-gallery) y configura tu **Review trigger** en **Devin Review**.
      </Tip>
    </Step>

    <Step title="Habilita corrección automática para que Devin envíe correcciones, no solo comentarios">
      De forma predeterminada, [Devin Review](/es/work-with-devin/devin-review) publica los errores detectados como comentarios en línea. corrección automática va más allá: Devin propone cambios de código y puede enviar commits de corrección directamente a la rama de la PR.

      Para habilitarlo, ve a **Settings > Customization > Pull requests > Responding to bots** y elige una de estas opciones:

      * **Selected only**: añade `devin-ai-integration[bot]` a la lista de permitidos (recomendado).
      * **All bots**: Devin actúa sobre todos los comentarios de bots, no solo los suyos.

      También puedes habilitar corrección automática desde la sección **corrección automática** de la barra lateral de revisión en cualquier PR creado por Devin (solo administradores de la organización).

      <Warning>
        "All bots" puede causar bucles infinitos si otros bots también comentan sobre los cambios de Devin. Usa el modo **Selected only** y añade solo `devin-ai-integration[bot]` para mantenerte seguro.
      </Warning>
    </Step>

    <Step title="Ve qué detecta y corrige Devin">
      Cuando se abre una PR en un repo inscrito, Devin Review se ejecuta automáticamente y produce:

      * **Errores detectados** en la barra lateral Analysis, etiquetados por gravedad (Severe o Non-severe) y nivel de confianza.
      * **Flags** (alertas) para patrones que vale la pena investigar, aunque no sean necesariamente incorrectos.
      * **Commits de corrección** enviados directamente a la rama de la PR para los problemas que Devin puede resolver (cuando corrección automática está activado).

      Por ejemplo, en una PR que añade una nueva página de configuración de usuario, Devin Review podría encontrar:

      ```
      Bug (Severe): Null reference in UserSettings.tsx:38

      `user.preferences.theme` throws if `preferences` is undefined,
      which happens for accounts created before v2.3.

      Fix pushed — commit e4a1b2c:
        const theme = user.preferences?.theme ?? 'system';
      ```

      Puedes revisar cada hallazgo en la vista de diff, marcar errores como resueltos o hacer preguntas de seguimiento usando el [chat con conocimiento del repositorio](/es/work-with-devin/devin-review) integrado: Devin tiene contexto de todo el repo, no solo del diff.
    </Step>

    <Step title="Enseña a Devin Review los estándares de tu equipo">
      Devin Review lee los archivos `AGENTS.md` y `REVIEW.md` en tu repositorio para aprender las convenciones de tu equipo. Usa estos archivos para definir preferencias de revisión, patrones comunes de errores a vigilar y estándares de codificación que quieres hacer cumplir:

      ```markdown theme={null}
      <!-- REVIEW.md -->
      ## Guías de revisión

      - Todos los manejadores de rutas de API en src/routes/* deben validar
        el cuerpo de la petición con esquemas de zod antes de acceder a sus
        propiedades. Marca cualquier manejador que lea campos de req.body
        sin validación.
      - El hook useUnsafeEffect en src/hooks/useUnsafeEffect.ts es
        intencional: no lo señales como un problema de dependencias faltantes.
      - Revisa que no haya casos de error sin manejar en las llamadas a la API.
      - Asegúrate de que las nuevas consultas a la base de datos tengan
        índices apropiados.
      ```

      Haz commit de este archivo en tu repo y Devin Review seguirá estas guías en cada PR. Actualízalo a medida que tu equipo descubra nuevos patrones; por ejemplo, después de un error en producción, añade el patrón que lo habría detectado para que Devin marque problemas similares en revisiones futuras.

      También puedes usar el [Review chat](/es/work-with-devin/devin-review) en cualquier PR para pedirle a Devin que busque patrones específicos en el diff; por ejemplo: "¿Hay alguna llamada a la API en esta PR que no maneje el caso de error?".
    </Step>
  </Steps>
</div>
