android-create-room-migration
Crear una migración Room manual (versión N a N+1) en data/db/Migrations.kt con schema JSON versionado y test Robolectric JVM; no para entidades nuevas completas (android-create-data-layer).
SKILL.md.claude/skills/android-create-room-migration/SKILL.md
GitHubandroid-create-room-migration
Crea la migración Room de la versión actual a la siguiente, con el schema JSON exportado y versionado en git y un test que la valida.
Cuándo usarla
- Cambió el esquema del
@Database(entity nueva, columna, índice, tabla borrada) y hay datos del usuario que no deben perderse.
Cuándo NO usarla
- Crear entity, DAO y repository desde cero →
android-create-data-layer(te remite aquí al subir la versión).
Precondiciones
- Conocer la
versionactual del@Databasey que existe el JSON de esa versión en el directorio de esquemas de:app(exportSchema = true). Si no existe, parar y avisar: no se reconstruye sin la versión previa. - Nunca editar ni borrar un schema JSON ya publicado; solo se añade el de la nueva versión.
Pasos
- Comprobar en
app/build.gradle.ktsqueroom.schemaLocationestá configurado, el directorio versionado en git y expuesto como assets de test unitario (los tests corren en JVM con Robolectric, no enandroidTest). Si falta, reutilizar el patrón existente. - Aplicar el cambio a las entities y subir
versiona N+1. ./gradlew assembleDebugpara que Room genere el JSON de N+1. Revisar su diff y confirmar que el de N no cambió.- Escribir
MIGRATION_N_N1 = object : Migration(N, N+1)endata/db/Migrations.ktcon SQL explícito (copiar datos, renombrar, valores por defecto coherentes). Sin@AutoMigrationsalvo cambio trivial acordado. - Registrarla en
addMigrations(...)del builder. ProhibidofallbackToDestructiveMigration. - Test en
src/test(JUnit4 + Robolectric +MigrationTestHelpercon los schemas JSON):createDatabase(nombre, N), insertar filas representativas, cerrar,runMigrationsAndValidate(nombre, N+1, true, MIGRATION_N_N1)y comprobar los datos con SQL. - Si hay varias versiones, test de la cadena desde la más antigua soportada hasta la actual.
Validaciones / tests
./gradlew testDebugUnitTest(incluye el test de migración)../gradlew ktlintCheck detekt lintDebug assembleDebug.git status: JSON de N+1 nuevo y ningún schema anterior modificado.
Definition of Done
-
versionincrementada, schema N+1 en git; el de N intacto. - Migración manual registrada; sin
fallbackToDestructiveMigration. - Test de migración en verde con datos previos conservados.
-
./gradlew ktlintCheck detekt lintDebug testDebugUnitTest assembleDebugen verde.
Docs a actualizar
docs/arquitectura.md(modelo local, si existe) ·docs/DECISIONES.mdsi cambia el modelo · docs/ESTADO.md (skillsession-handoff)