ESPACIO PUBLICITARIO DISPONIBLE · HABLEMOS

Cómo configurar Sweep para convertir incidencias de GitHub en pull requests automatizados de corrección de errores

365Finds Editorial
11.430 artículos Wiki recopilados

Usa 365 Wiki con tu IA

Copia el prompt de abajo, pégalo en la IA que ya usas y haz tu pregunta.

Descargar el Skill completo

Pruébalo primero con el prompt. Si usas 365 Wiki a menudo, instala el Skill completo de 365Wiki y no tendrás que volver a pegarlo. Si no tienes una IA habitual, también sirven las versiones web de Gemini o Microsoft Copilot.

En los equipos de desarrollo de software modernos, la acumulación constante de pequeños errores y tareas de mantenimiento repetitivas representa una fuga continua de tiempo y concentración. Las comprobaciones de punteros nulos, la actualización de bibliotecas obsoletas, el ajuste de expresiones regulares o la adición de pruebas unitarias faltantes suelen quedar estancadas en el backlog durante semanas porque los desarrolladores sénior deben priorizar las funcionalidades críticas de negocio.

Sweep fue concebido precisamente como un desarrollador júnior autónomo impulsado por inteligencia artificial (AI Junior Developer). Al integrarse como una GitHub App en el repositorio, Sweep supervisa las incidencias (Issues), indexa el código mediante embeddings vectoriales y análisis sintáctico (AST), genera modificaciones en múltiples archivos y abre un Pull Request (PR) estructurado. Además, cierra el ciclo de desarrollo al inspeccionar los fallos en las pruebas de integración continua (CI) de GitHub Actions para autocorregirse y reacciona de forma inmediata a los comentarios de revisión de código realizados por los desarrolladores.

Esta guía detalla cómo configurar Sweep en un entorno de producción, estructurar el archivo sweep.yaml, redactar incidencias óptimas para guiar al modelo y establecer límites de seguridad en el flujo de trabajo.


1. Ciclo de vida: de una incidencia de GitHub a un Pull Request

Antes de desplegar los archivos de configuración, el equipo debe comprender cómo procesa Sweep cada tarea:

  1. Evento disparador: Un desarrollador abre una incidencia en GitHub con el prefijo Sweep: (por ejemplo, Sweep: Fix KeyError when user metadata payload is missing), añade la etiqueta sweep o menciona a @sweepai en un comentario.
  2. Recuperación de contexto del repositorio: El webhook de Sweep (on_ticket) se activa y utiliza incrustaciones vectoriales y segmentación por AST para localizar los archivos, clases y pruebas relacionados con el problema reportado.
  3. Plan de ejecución interactivo: Sweep publica un comentario en la incidencia resumiendo su enfoque técnico y detallando la lista de archivos que modificará.
  4. Generación de código y rama: En una rama aislada (por ejemplo, sweep/fix-...), Sweep escribe las modificaciones respetando las directrices del proyecto.
  5. Apertura del Pull Request: Sweep emite un PR formal que incluye el enlace de resolución (Fixes #<id>), un resumen de cambios y una lista de verificación.
  6. Bucle de retroalimentación:
    • Autocorrección con CI: Con GitHub Actions habilitado (gha_enabled: true), si las pruebas fallan, Sweep examina los registros de error y realiza nuevos commits correctivos.
    • Revisión humana: Si un revisor deja comentarios línea a línea en el diff del PR, Sweep los interpreta e introduce las correcciones solicitadas en la misma rama.

2. Instalación y permisos en GitHub

Para conectar Sweep con su organización o proyecto:

  1. Instalación de la GitHub App: Acceda al panel de instalación de la aplicación Sweep en GitHub y seleccione los repositorios que desea autorizar.
  2. Permisos requeridos:
    • Repository Contents (Lectura y Escritura): Para examinar el código fuente y crear ramas con commits.
    • Issues (Lectura y Escritura): Para leer descripciones de incidencias, gestionar etiquetas y publicar actualizaciones de estado.
    • Pull Requests (Lectura y Escritura): Para crear PRs, inspeccionar diffs y responder a revisiones de código.
    • Actions / Checks (Lectura): Para extraer trazas de error cuando fallen los flujos de integración continua.
  3. Estrategia de borradores: Al principio, es recomendable configurar los PRs en modo borrador (draft: true) para evitar notificaciones prematuras en los canales del equipo hasta que un ingeniero valide el enfoque propuesto.

3. Configuración del proyecto mediante sweep.yaml

El comportamiento de Sweep se define a través del archivo sweep.yaml (o .sweep/config.yaml) ubicado en la raíz del repositorio. Este archivo evita alucinaciones en las importaciones, estandariza el estilo y protege zonas sensibles del sistema.

Plantilla de producción de sweep.yaml

# sweep.yaml - Configuración para la resolución automática de incidencias

# Rama base sobre la que Sweep creará las ramas de trabajo y los PRs
branch: 'main'

# Abrir PRs como borrador (recomendado en fase inicial)
draft: false

# Permitir a Sweep leer los registros de GitHub Actions y autocorregirse
gha_enabled: true

# Descripción general del proyecto para orientar el contexto del modelo
description: >
  API REST de backend construida con Python 3.10 y FastAPI.
  La persistencia se gestiona con SQLAlchemy 2.0 y PostgreSQL.
  La lógica de negocio se encuentra en services/, los modelos en models/ y las rutas en api/v1/.
  Todas las importaciones deben ser absolutas (ej. `from services.auth import verify_token`).

# Directorios y archivos que Sweep NUNCA debe modificar ni leer
blocked_dirs:
  - "deploy/"
  - "terraform/"
  - ".github/workflows/"
  - "migrations/"
  - "*.env*"
  - "security/"

# Comandos de sandbox ejecutados antes de abrir el Pull Request
sandbox:
  install:
    - "poetry install --no-root"
  check:
    - "poetry run ruff check {file_path}"
    - "poetry run pytest tests/unit"

# Reglas estrictas de codificación inyectadas en el prompt del agente
rules:
  - "Todo arreglo de bug debe incluir o actualizar pruebas unitarias con pytest en tests/."
  - "Prohibido el uso de importaciones comodín (`from module import *`)."
  - "Utilizar esquemas Pydantic v2 para la validación de peticiones y respuestas."
  - "Registrar logs con loguru; en bloques de excepción usar logger.exception() para incluir tracebacks."
  - "No modificar el esquema de base de datos ni generar migraciones alembic sin orden explícita."
  - "Añadir anotaciones de tipos completas en todas las firmas de funciones."

Directivas clave explicadas


4. Redacción de incidencias efectivas para Sweep

La precisión del Pull Request generado depende de la claridad y especificidad del Issue en GitHub. A diferencia de un colega humano que puede consultar dudas por chat, el agente de IA depende exclusivamente del repositorio y del texto de la incidencia.

Estructura ideal de un reporte de error

Título: Sweep: Fix 400 Bad Request on empty user metadata payload in /api/v1/profile

### Descripción del error
Al actualizar un perfil mediante `PUT /api/v1/profile`, enviar un diccionario vacío en `metadata` genera un ValidationError en lugar de aplicar los valores por defecto.

### Pasos para reproducir
1. Enviar una petición PUT a `/api/v1/profile` con el cuerpo `{"metadata": {}}`.
2. Observar que el servidor responde con HTTP 400 y el detalle `Value error, metadata must contain required fields`.

### Comportamiento esperado
Un diccionario `metadata` vacío debe ser aceptado, inicializado con valores predeterminados (`{"theme": "light", "notifications": true}`) y guardado correctamente.

### Archivos y funciones relevantes
- `api/v1/profile.py`: Controlador de la ruta `update_profile`.
- `schemas/profile.py`: Modelo Pydantic `UserProfileUpdate`.
- `services/profile_service.py`: Función auxiliar `save_profile_metadata`.

### Criterios de aceptación
- Corregir la validación en `schemas/profile.py` para permitir diccionarios vacíos con valores por defecto.
- Añadir una prueba en `tests/unit/test_profile_api.py` que verifique esta condición.
- Garantizar que todas las pruebas existentes en `tests/unit/` se ejecuten con éxito.

Modificadores de título y modos de ejecución

La función de análisis de títulos de Sweep (strip_sweep) admite prefijos especiales para modular el comportamiento:


5. El ciclo de revisión e interacción en el PR

Una vez publicado el Pull Request, la colaboración se gestiona directamente en GitHub:

[GitHub Issue] ──> Activación de Sweep ──> PR Creado ──> CI (GitHub Actions)
                                                               │
                         ┌─────────────────────────────────────┴─────┐
                         ▼                                           ▼
                   CI Falla (gha_enabled)                        CI Exitoso
                         │                                           │
                         ▼                                           ▼
               Sweep commitea solución                      Revisión de Código Humana
                         │                                           │
                         └─────────► PR Actualizado ◄────────────────┘
                                           │
                                 (Comentario de revisión:
                               "@sweepai reutiliza la función
                                 auxiliar ya existente")

Comentarios de revisión en el diff

Los desarrolladores no necesitan descargar la rama localmente para pedir ajustes menores. Basta con comentar sobre la línea afectada:

@sweepai Utiliza nuestra función DateUtils.formatIso() en lugar de instanciar un nuevo formateador de fechas.

Sweep procesa el comentario, contextualiza el cambio e inserta un nuevo commit en el Pull Request.

Regeneración de la incidencia

Si la solución inicial no es adecuada o la descripción del Issue era imprecisa, los ingenieros pueden editar el título o la descripción del Issue original en GitHub. Sweep detectará la actualización, descartará la rama previa y generará un PR nuevo desde cero.


6. Buenas prácticas de seguridad y limitaciones operativas

Para implementar agentes autónomos en un entorno empresarial con total tranquilidad:

  1. Aprobación humana obligatoria: No configure nunca la fusión automática (Auto-merge) en los PRs de Sweep. Exija mediante reglas de protección de rama la aprobación de al menos un ingeniero sénior y el paso satisfactorio del CI.
  2. Aislamiento estricto de rutas críticas: Bloquee en blocked_dirs la infraestructura como código (terraform/, k8s/), los flujos de trabajo (.github/), las migraciones de bases de datos y los archivos de secretos.
  3. Acotación de tareas: Emplee a Sweep para errores delimitados, ampliación de pruebas unitarias y refactorizaciones locales. Evite delegar rediseños arquitectónicos o desarrollos con requisitos ambiguos.
  4. Batería de pruebas sólida: La capacidad de autorreparación de Sweep depende íntegramente del feedback de las pruebas. Cuanto mayor sea la cobertura de tests, mayor será la fiabilidad del código propuesto.

Referencias