fix: preservar datos y recuperar base local
This commit is contained in:
@@ -0,0 +1,2 @@
|
||||
schema: spec-driven
|
||||
created: 2026-10-25
|
||||
23
openspec/changes/harden-database-bootstrap-reset/design.md
Normal file
23
openspec/changes/harden-database-bootstrap-reset/design.md
Normal file
@@ -0,0 +1,23 @@
|
||||
# Design
|
||||
|
||||
## Context
|
||||
|
||||
Dexie abre la base al ejecutar la primera consulta. El esquema tiene migraciones 1, 2 y 3, pero `main.ts` monta Vue inmediatamente y no distingue una base en migración de un error de operación.
|
||||
|
||||
## Goals / Non-Goals
|
||||
|
||||
**Goals:** hacer explícita la apertura, evitar operaciones contra una base no lista, ofrecer recuperación manual y preservar datos durante actualizaciones compatibles.
|
||||
|
||||
**Non-Goals:** borrar o reconstruir automáticamente una base con error, sincronizar datos con servidor o reemplazar las migraciones Dexie.
|
||||
|
||||
## Decisions
|
||||
|
||||
- `db.open()` se ejecutará antes de montar la aplicación.
|
||||
- Un fallo de apertura montará una vista mínima de recuperación con mensaje técnico resumido y botón de reset destructivo.
|
||||
- El reset se expondrá también desde Exportar/Importar, exigiendo confirmación y recomendando exportar antes.
|
||||
- Las migraciones se mantendrán como versiones Dexie; cada cambio futuro de esquema deberá agregar una versión y upgrade explícito.
|
||||
|
||||
## Risks / Trade-offs
|
||||
|
||||
- El usuario puede resetear por error -> confirmación explícita y texto de pérdida de datos.
|
||||
- Una base realmente corrupta puede no permitir exportación -> la pantalla explicará que el reset es último recurso.
|
||||
29
openspec/changes/harden-database-bootstrap-reset/proposal.md
Normal file
29
openspec/changes/harden-database-bootstrap-reset/proposal.md
Normal file
@@ -0,0 +1,29 @@
|
||||
# Proposal
|
||||
|
||||
## Why
|
||||
|
||||
La app abre Dexie de forma implícita y no informa cuando una migración o apertura de IndexedDB falla. Esto puede parecer una pérdida de datos y obliga a borrar manualmente el almacenamiento para continuar.
|
||||
|
||||
## What Changes
|
||||
|
||||
- Abrir y validar la base local antes de montar Vue.
|
||||
- Mostrar una pantalla de recuperación si la apertura/migración falla.
|
||||
- Añadir reset manual del entorno desde Exportar/Importar, con confirmación destructiva.
|
||||
- Mantener las migraciones Dexie y documentar que nunca deben borrar datos automáticamente.
|
||||
- Añadir pruebas de persistencia y reset.
|
||||
|
||||
## Capabilities
|
||||
|
||||
### New Capabilities
|
||||
|
||||
- `database-bootstrap-recovery`: apertura explícita, diagnóstico y recuperación controlada de IndexedDB.
|
||||
|
||||
### Modified Capabilities
|
||||
|
||||
- `toldo-poc`: persistencia local y operación offline.
|
||||
|
||||
## Impact
|
||||
|
||||
- `packages/data`: bootstrap/reset de base.
|
||||
- `apps/toldo-app`: arranque, pantalla de error y mantenimiento.
|
||||
- Tests Vitest, documentación de agentes y APK.
|
||||
@@ -0,0 +1,33 @@
|
||||
# Spec Delta
|
||||
|
||||
## Purpose
|
||||
|
||||
Protege los datos locales durante actualizaciones y ofrece una recuperación explícita cuando IndexedDB no puede abrirse o migrarse.
|
||||
|
||||
## ADDED Requirements
|
||||
|
||||
### Requirement: Apertura explícita de base
|
||||
The system SHALL open and complete local database migrations before allowing operational views to run.
|
||||
|
||||
#### Scenario: Actualización compatible
|
||||
- **GIVEN** data exists in an older supported schema
|
||||
- **WHEN** the app starts after an update
|
||||
- **THEN** migrations complete before the main UI mounts
|
||||
- **AND** existing records remain available
|
||||
|
||||
### Requirement: Recuperación ante error
|
||||
The system SHALL show a recovery screen when the local database cannot be opened.
|
||||
|
||||
#### Scenario: Migración fallida
|
||||
- **WHEN** database opening fails
|
||||
- **THEN** the app shows an actionable error
|
||||
- **AND** no operational action is rendered as if data were empty
|
||||
- **AND** user can explicitly reset local data
|
||||
|
||||
### Requirement: Reset manual
|
||||
The system SHALL require explicit confirmation before deleting all local data.
|
||||
|
||||
#### Scenario: Reset confirmado
|
||||
- **WHEN** user confirms reset from maintenance
|
||||
- **THEN** local database is deleted and recreated on reload
|
||||
- **AND** the app starts with an empty environment
|
||||
12
openspec/changes/harden-database-bootstrap-reset/tasks.md
Normal file
12
openspec/changes/harden-database-bootstrap-reset/tasks.md
Normal file
@@ -0,0 +1,12 @@
|
||||
# Tasks
|
||||
|
||||
## 1. Bootstrap y recuperación
|
||||
|
||||
- [x] 1.1 Añadir apertura explícita Dexie antes de montar Vue y vista de error recuperable
|
||||
- [x] 1.2 Añadir helper de reset local sin usarlo automáticamente
|
||||
- [x] 1.3 Añadir reset manual en Exportar/Importar con confirmación
|
||||
|
||||
## 2. Verificación
|
||||
|
||||
- [x] 2.1 Cubrir apertura, persistencia y reset con tests
|
||||
- [x] 2.2 Ejecutar tests, `vue-tsc`, Playwright y build/APK
|
||||
@@ -8,7 +8,7 @@ La aplicación usa versiones distintas o hardcodeadas entre npm, Android y las e
|
||||
|
||||
- Definir `versionName` y `versionCode` en un archivo versionado compartido.
|
||||
- Usar esos valores en Gradle, npm y exportaciones JSON.
|
||||
- Publicar la siguiente versión como `0.0.5` con `versionCode 5`.
|
||||
- Publicar la siguiente versión como `0.0.6` con `versionCode 6`.
|
||||
- Validar el `applicationId` y la versión en el APK generado.
|
||||
|
||||
## Capabilities
|
||||
|
||||
@@ -9,10 +9,10 @@ Asegura que cada actualización de ToldoConjunto pueda identificarse y actualiza
|
||||
### Requirement: Versionado consistente
|
||||
The system SHALL expose the same semantic version in npm metadata, exported data, and Android versionName.
|
||||
|
||||
#### Scenario: Version 0.0.5
|
||||
#### Scenario: Version 0.0.6
|
||||
- **WHEN** the app is built
|
||||
- **THEN** npm and exported data report `0.0.5`
|
||||
- **AND** Android reports versionName `0.0.5` and versionCode `5`
|
||||
- **THEN** npm and exported data report `0.0.6`
|
||||
- **AND** Android reports versionName `0.0.6` and versionCode `6`
|
||||
|
||||
### Requirement: Identidad Android estable
|
||||
The system SHALL preserve the application id `com.ilusion.toldoconjunto` across releases.
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
## 1. Versionado
|
||||
|
||||
- [x] 1.1 Crear la fuente compartida con `versionName=0.0.5` y `versionCode=5`, y actualizar npm/exportaciones
|
||||
- [x] 1.1 Crear la fuente compartida con `versionName=0.0.6` y `versionCode=6`, y actualizar npm/exportaciones
|
||||
- [x] 1.2 Configurar Gradle para leer la fuente compartida y conservar el applicationId
|
||||
- [x] 1.3 Añadir test que compruebe versionado y compatibilidad de exportación
|
||||
|
||||
|
||||
Reference in New Issue
Block a user