fix: preservar datos y recuperar base local

This commit is contained in:
mono
2026-10-25 21:27:44 -05:00
parent a21c43684c
commit 6a3352a96c
19 changed files with 183 additions and 14 deletions

View File

@@ -0,0 +1,2 @@
schema: spec-driven
created: 2026-10-25

View 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.

View 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.

View File

@@ -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

View 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