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

# Compilaciones diferenciales

> Acelera las compilaciones de instantánea recompilando solo los workspaces cuyos blueprints hayan cambiado. Los workspaces sin cambios se heredan de la última compilación exitosa.

<div id="overview">
  ## Resumen
</div>

De forma predeterminada, cada compilación de instantánea es una **compilación completa**: parte de una imagen base limpia, clona todos los repositorios y ejecuta cada blueprint desde cero. Esto garantiza un entorno completamente reproducible, pero puede resultar lento cuando solo cambiaste un blueprint entre muchos.

Las **compilaciones diferenciales** optimizan este proceso reutilizando la instantánea de la compilación anterior que se completó correctamente como punto de partida. Solo se recompilan los workspaces cuyos blueprints realmente cambiaron; los workspaces sin cambios se heredan tal cual de la compilación de origen. Esto puede reducir significativamente los tiempos de compilación, especialmente en organizaciones con muchos repositorios.

<div id="enabling-differential-builds">
  ## Habilitar compilaciones diferenciales
</div>

<Steps>
  <Step title="Ve a la configuración del entorno">
    Ve a **Settings > Environment > Avanzado**.
  </Step>

  <Step title="Activa el interruptor">
    Activa el interruptor **compilación diferencial**. La descripción dice: *"Compilaciones más rápidas al reutilizar workspaces sin cambios."*
  </Step>

  <Step title="Inicia una compilación">
    Guarda un cambio en el blueprint o haz clic en **Build snapshot**. La siguiente compilación intentará ejecutarse como una compilación diferencial si existe una compilación padre válida.
  </Step>
</Steps>

<Warning>
  La primera compilación después de habilitar las compilaciones diferenciales siempre será una **compilación completa** — el sistema necesita una instantánea de referencia generada correctamente para poder compararla. Las compilaciones posteriores serán diferenciales siempre que exista una compilación padre válida.
</Warning>

<div id="how-it-works">
  ## Cómo funciona
</div>

Cuando se inicia una compilación con las compilaciones diferenciales habilitadas, el sistema sigue este proceso:

<div id="1-find-a-parent-build">
  ### 1. Encontrar una compilación base
</div>

El sistema busca la compilación exitosa más reciente (status `success` o `partial`) para usarla como base. Si no existe ninguna compilación base que cumpla los requisitos, se recurre automáticamente a una compilación completa.

<div id="2-compare-blueprints">
  ### 2. Comparar blueprints
</div>

La configuración de cada workspace se compara con la compilación principal. El sistema calcula un hash de las entradas de cada workspace —incluidos el contenido del blueprint, los archivos adjuntos, los secretos y el orden de los repositorios— y comprueba qué cambió.

<div id="3-assign-workspace-actions">
  ### 3. Asignar acciones al workspace
</div>

Según la comparación, a cada workspace se le asigna una de estas tres acciones:

| Acción      | Qué sucede                                                                                      | Cuándo se usa                                                              |
| ----------- | ----------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------- |
| **Rebuild** | Clona el repo y ejecuta todos los pasos del blueprint (`initialize` + `maintenance`) desde cero | El blueprint cambió desde la compilación padre                             |
| **Inherit** | Obtiene el código más reciente y ejecuta solo los pasos de `maintenance`                        | El blueprint no cambió: reutiliza la configuración de la compilación padre |
| **Remove**  | Elimina el workspace de la instantánea                                                          | El workspace se eliminó de la configuración                                |

<Info>
  Para los workspaces heredados, `initialize` no se ejecuta de nuevo. Escribe `maintenance`
  de modo que sea autocontenido y pueda ejecutarse de forma independiente después de obtener
  el código más reciente. Puede usar herramientas y runtimes ya instalados en la instantánea padre,
  pero no debe requerir que `initialize` se ejecute inmediatamente antes ni depender de
  variables de entorno que `initialize` haya escrito previamente en `$ENVRC`.
</Info>

<div id="4-execute-the-build">
  ### 4. Ejecuta la compilación
</div>

La compilación parte de la imagen de instantánea de la compilación padre, en lugar de una base limpia. Esto significa lo siguiente:

* **Workspaces heredados** ya tienen instaladas sus herramientas, runtimes y dependencias. El sistema descarga el código más reciente (`git pull`) y ejecuta los comandos de `maintenance` para actualizar las dependencias.
* **Workspaces recompilados** se configuran desde cero: se vuelven a clonar y pasan por la secuencia completa de `initialize` + `maintenance`.
* **Workspaces eliminados** tienen sus directorios limpiados.

Los blueprints de organización y de Enterprise omiten `initialize` durante las compilaciones diferenciales (ya que esas herramientas ya están presentes en la imagen principal) y ejecutan solo `maintenance`.

<Note>
  `$ENVRC` se restablece al inicio de cada compilación, incluidas las compilaciones diferenciales.
  Las variables de entorno y las entradas de `PATH` escritas en `$ENVRC` por una compilación anterior
  no se heredan. Si `maintenance` las necesita, debe configurarlas
  por su cuenta.
</Note>

<div id="when-a-full-build-runs-instead">
  ## Cuándo se ejecuta una compilación completa en su lugar
</div>

Incluso con las compilaciones diferenciales habilitadas, el sistema recurre a una compilación completa en ciertas situaciones:

* **No existe una compilación principal** — es la primera compilación o todas las compilaciones anteriores fallaron
* **Cambió el blueprint de la organización o de Enterprise** — los cambios globales afectan a todos los workspaces, por lo que es más seguro hacer una recompilación limpia
* **Cambió el orden de los repos** — como los repos pueden depender de la configuración de otros, reordenarlos desencadena una recompilación completa
* **La compilación principal es demasiado antigua o incompatible** — el sistema valida que la compilación principal sea adecuada

Cuando esto sucede, la página de detalles de la compilación muestra el motivo debajo de la insignia del tipo de compilación.

<div id="viewing-build-kind">
  ## Ver el tipo de compilación
</div>

Después de que se complete una compilación, puedes ver si se ejecutó como una compilación diferencial o completa:

1. Ve a **Settings > Environment > Snapshots**
2. Haz clic en una compilación del historial
3. La etiqueta **Build kind** muestra **Differential** (azul) o **Full build** (predeterminado)

Pasa el cursor sobre la etiqueta para ver una información sobre herramientas que explica qué significa cada tipo:

* **Differential**: *"Solo se vuelven a compilar los workspaces modificados; los que no han cambiado se heredan de la última compilación exitosa con la misma configuración"*
* **Full build**: *"Todos los workspaces se compilan desde cero"*

<div id="benefits">
  ## Beneficios
</div>

| Beneficio                     | Descripción                                                                                                                                                                 |
| ----------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Compilaciones más rápidas** | Solo los espacios de trabajo modificados pasan por el proceso completo de configuración. Los espacios de trabajo heredados omiten `initialize` por completo.                |
| **Menor tráfico de red**      | Los espacios de trabajo sin cambios no vuelven a descargar herramientas, runtimes ni dependencias de gran tamaño.                                                           |
| **Iteración más rápida**      | Al iterar sobre el blueprint de un solo repositorio, los demás repositorios no ralentizan la compilación.                                                                   |
| **La misma fiabilidad**       | Si algo parece incorrecto, el sistema recurre automáticamente a una compilación completa. También puedes iniciar manualmente una compilación completa en cualquier momento. |

<div id="manually-triggering-a-full-build">
  ## Iniciar manualmente una compilación completa
</div>

Incluso con las compilaciones diferenciales habilitadas, puedes forzar una compilación completa desde el botón **Build snapshot**. Usa el menú desplegable para seleccionar **Compilación completa** en lugar de la opción diferencial predeterminada.

Recomendamos ejecutar una compilación completa periódicamente para descartar el estado heredado y verificar que tus blueprints aún puedan crear el Environment desde cero. Ejecuta también una después de eliminar o reemplazar la configuración que pueda haber dejado archivos, herramientas o dependencias obsoletos en la instantánea. Una compilación completa vuelve a ejecutar todos los pasos de `initialize` y `maintenance`.

<div id="faq">
  ## Preguntas frecuentes
</div>

<AccordionGroup>
  <Accordion title="¿Activar las compilaciones diferenciales afecta a mis sesiones?">
    No. Las sesiones siempre se inician desde la instantánea final, independientemente de cómo se haya realizado la compilación. La única diferencia es la velocidad de compilación.
  </Accordion>

  <Accordion title="¿Qué pasa si una compilación diferencial genera una instantánea defectuosa?">
    Fija una compilación anterior que sepas que funciona desde **Settings > Environment > Snapshots** y luego desencadena una compilación completa para obtener una instantánea limpia. También puedes desactivar por completo las compilaciones diferenciales para volver a las compilaciones completas.
  </Accordion>

  <Accordion title="¿Las compilaciones parciales pueden servir como compilación principal?">
    Sí. Una compilación con estado `partial` (algunos workspaces se completaron correctamente y otros fallaron) puede servir como compilación principal. El sistema hereda solo de los workspaces que se completaron correctamente en la compilación principal.
  </Accordion>
</AccordionGroup>
