Skip to main content

Aplicar una lista de verificación de migración en cada PR

Crea una skill de repositorio que haga que Devin detecte operaciones destructivas, verifique la seguridad del rollback y valide los cambios de esquema siempre que un PR incluya migraciones de base de datos.
AuthorCognition
CategoryCore Devin
FeaturesSkills
1

Crea la habilidad de lista de comprobación para la migración

Una skill de repositorio es un archivo markdown que haces commit en .agents/skills/<your-skill>/ en cualquiera de tus repositorios. Devin ve todas las skills en todos los repositorios conectados: puedes activarlas manualmente o Devin puede decidir activarlas automáticamente cuando detecta una situación relevante. Esta skill le indica a Devin exactamente cómo revisar las migraciones de base de datos antes de abrir o actualizar una solicitud de extracción de código (pull request, PR), detectando los errores que la revisión de código suele pasar por alto.Haz commit de .agents/skills/migration-checklist/migration-checklist.md en tu repositorio:
# Lista de verificación de seguridad para migraciones

## Description
Revisa cada migración de base de datos en el PR actual para detectar problemas de seguridad
antes de abrir o actualizar el pull request.

## When to use
Invoca esta habilidad siempre que el diff del PR incluya archivos nuevos o modificados
en `db/migrate/` (Rails), `migrations/` (Django), o
`prisma/migrations/` (Prisma).

## Checklist

### 1. Detect destructive operations
Analiza cada archivo de migración en busca de:
- `DROP TABLE` o `drop_table`
- `DROP COLUMN`, `remove_column`, o eliminación de columna
- `TRUNCATE`
- Cambios de tipo de dato que pierden precisión (p. ej. `text``varchar(50)`)

Si se encuentra alguno, agrega un comentario al PR señalando la operación y
confirmando si existe un paso de respaldo de datos en la migración.

### 2. Verify foreign-key indexes
Para cada `add_reference`, `add_foreign_key`, o nueva columna que termine
en `_id`, confirma que existe un índice correspondiente. Si no existe, agrégalo a la
migración antes de hacer el commit.

### 3. Check rollback safety
- Ejecuta `bin/rails db:migrate:rollback STEP=<n>` (donde n = número de
  nuevas migraciones) contra la base de datos de prueba.
- Si el rollback falla, agrega un método `down` o un bloque reversible y
  vuelve a intentarlo.
- Reporta cualquier migración irreversible en la descripción del PR.

### 4. Validate schema file is up-to-date
Después de ejecutar las migraciones, compara `db/schema.rb` (o `structure.sql`)
con la versión en el PR. Si difieren, regenera el archivo de esquema
e inclúyelo en el commit.

### 5. Run model tests
Ejecuta `bin/rails test test/models/` para detectar validaciones o
asociaciones rotas por cambios en el esquema. Todas las pruebas deben pasar antes
de abrir el PR.
Una vez que se haya confirmado este archivo, Devin lo considera una habilidad disponible. Cada vez que una sesión interactúe con archivos de migración en este repositorio, Devin puede activar la lista de verificación automáticamente, o puedes invocarla manualmente en cualquier momento.
2

Vea el disparador de la habilidad en una migración real

Cuando Devin trabaja en una tarea que agrega o modifica un archivo de migración, lee el diff, detecta la habilidad de lista de verificación de migraciones y sigue la lista antes de abrir la PR. Así es como se ve en la práctica:
  1. Escanea el diff — Devin ve un archivo nuevo en db/migrate/ y activa la habilidad de lista de verificación de migraciones
  2. Marca una operación destructiva — La migración elimina una columna legacy_email. Devin agrega un comentario en la PR:
    remove_column :users, :legacy_email es una operación destructiva. Verificado: la migración incluye un paso de copia de seguridad de datos que copia los valores a user_archives antes de la eliminación.
  3. Agrega un índice faltante — La migración agrega account_id a la tabla invoices pero no tiene índice. Devin agrega add_index :invoices, :account_id al archivo de migración
  4. Ejecuta el rollback — Devin ejecuta bin/rails db:migrate:rollback STEP=1 contra la base de datos de pruebas. Se ejecuta correctamente
  5. Regenera el esquema — Devin ejecuta bin/rails db:schema:dump, detecta un diff en db/schema.rb e incluye el archivo actualizado en el commit
  6. Ejecuta las pruebas de modelos — Todas las pruebas de modelos pasan. Devin abre la PR con un resumen de cada verificación
La descripción de la PR incluye una lista de verificación que muestra qué se aprobó y qué corrigió Devin, de modo que los revisores puedan centrarse en la lógica de negocio en lugar de en la mecánica de la migración.
3

Adapta la skill a tu ORM y a tu stack

La lista de verificación anterior está orientada a Rails, pero la misma estructura funciona para cualquier ORM. Pídele a Devin que reescriba la skill para tu stack:
4

Ve ampliando la lista de comprobación con el tiempo

Cada incidente de migración revela una brecha que la checklist no cubrió. Después de cada uno, agrega una regla: es un commit de una sola línea en el archivo de skill.Estas son incorporaciones habituales que los equipos hacen después de incidentes reales:
### 6. Enforce migration naming conventions
Reject migrations that don't follow the pattern
`YYYYMMDDHHMMSS_verb_noun.rb` (e.g. `add_index_to_invoices`).
Rename the file if needed.

### 7. Check for long-running locks
Flag any `add_column` on tables with >1M rows that doesn't use
`disable_ddl_transaction!` (Postgres) or `ALGORITHM=INPLACE`
(MySQL). Large tables need non-blocking migrations.

### 8. Require a migration test
Ensure a corresponding test file exists at
`test/migrations/YYYYMMDDHHMMSS_migration_name_test.rb`.
If missing, generate a skeleton test that runs the migration
up and down.
Como el archivo de skill está en tu repositorio, estas reglas pasan por revisión de código: todo tu equipo está de acuerdo sobre qué se comprueba y siempre están sincronizadas con tus herramientas de migración.