From d5eb2242ca171d4148300f053459294a463b2cfa Mon Sep 17 00:00:00 2001 From: vjrj Date: Tue, 7 Jul 2026 22:14:53 +0200 Subject: [PATCH] docs(block1): status marker + IntelliJ run config --- .run/app_seeds (tane).run.xml | 7 +++ docs/design/block1-status.md | 81 +++++++++++++++++++++++++++++++++++ 2 files changed, 88 insertions(+) create mode 100644 .run/app_seeds (tane).run.xml create mode 100644 docs/design/block1-status.md diff --git a/.run/app_seeds (tane).run.xml b/.run/app_seeds (tane).run.xml new file mode 100644 index 0000000..5baab11 --- /dev/null +++ b/.run/app_seeds (tane).run.xml @@ -0,0 +1,7 @@ + + + + diff --git a/docs/design/block1-status.md b/docs/design/block1-status.md new file mode 100644 index 0000000..2ac311c --- /dev/null +++ b/docs/design/block1-status.md @@ -0,0 +1,81 @@ +# Block 1 — estado actual (marcador) + +*Dónde estamos en el Bloque 1 (inventario offline, cifrado, multilingüe). Este +fichero es el marcador de progreso; actualízalo al avanzar. Convenciones en +[`../../CLAUDE.md`](../../CLAUDE.md) y guía del sprint en [`first-sprint.md`](first-sprint.md).* + +## Hecho ✅ + +Arquitectura y estado (como G1nkgo pero adaptado): **`flutter_bloc` (Cubit)** con +la **BD Drift cifrada (SQLCipher) como fuente de verdad** (sin hydrated_bloc/Hive, +que dejaría texto en claro); **`get_it`**, **`go_router`**, **`slang`** (ES/EN, +JSON por locale, compatible Weblate). Ver [`../../apps/app_seeds`](../../apps/app_seeds). + +- **Workspace + CI**: pub workspace (`commons_core` puro Dart + `app_seeds`), + AGPL LICENSE, `.gitlab-ci.yml` (format + analyze + test + cobertura, + instala libsqlcipher). +- **commons_core**: UUIDv7 (`IdGen`), Hybrid Logical Clock (`Hlc`), `Quantity` + (+ `QuantityKind` plant-aware), stub de semilla raíz (`IdentityService`). +- **BD**: Drift `schemaVersion=1`, 10 tablas + columnas CRDT (HLC `updated_at`, + `last_author`, tombstones); `Movement` append-only. Export + `drift_schemas/drift_schema_v1.json` + test de migración. +- **Cifrado**: SQLCipher vía executor inyectable que **se niega a abrir en claro**; + clave de BD + semilla raíz en el keystore (secretos separados). Test + "no plaintext at rest" **verificado** (corre con libsqlcipher; en CI se instala). +- **Inventario (UI)**: alta rápida (etiqueta + foto + cantidad ~20 s), lista por + categorías con búsqueda y **miniatura de foto**/inicial, ficha con nombre + científico, categoría, nombres vernáculos (solo lectura), notas, lotes + (año + unidad) y **% de germinación** por lote, edición de campos + enlazar + **especie del catálogo** (rellena familia), borrado suave. +- **Catálogo de especies**: 14 hortícolas ibéricas (familia + nombres ES/EN), + sembrado idempotente al arrancar, búsqueda + autocompletado. +- **Germinación**: pruebas por lote (germinadas/muestra → tasa derivada), badge + reactivo. +- **Tests**: 37 verdes, 0 saltados. `analyze` + `format` limpios. + +## Pendiente en el Bloque 1 (pulido) ⏳ + +- **Editar nombres vernáculos** ("también conocida como": hoy solo lectura; + falta añadir/quitar — colección OR-Set). +- **Editar/borrar lotes** (se pueden añadir pero no modificar/eliminar). +- (Opcional) QR de recuperación de la semilla raíz; almacenamiento cifrado de + fotos fuera de la BD (hoy van como BLOB cifrado dentro de la BD, que cumple la + regla). + +## Fuera de alcance (Bloque 2, no empezar) 🚫 + +Ofertas, mensajería, relays, Nostr, red de confianza, Ğ1, sincronización entre +dispositivos, backup completo. Ver [`../../CLAUDE.md`](../../CLAUDE.md). + +## Cómo correr la app + +**Requisitos previos** (una vez): los ficheros generados (Drift, slang) ya están +commiteados; si algo falla, regenera con: + +```bash +cd apps/app_seeds +dart run build_runner build --delete-conflicting-outputs # Drift +dart run slang # i18n +``` + +**IntelliJ IDEA** (con plugins *Flutter* y *Dart* instalados): + +1. Abre la carpeta raíz del repo (`tane`) como proyecto. +2. En *Settings → Languages & Frameworks → Flutter*, apunta al SDK de Flutter. +3. Hay una configuración de ejecución lista: **`app_seeds (tane)`** (en `.run/`), + cuyo *Dart entrypoint* es `apps/app_seeds/lib/main.dart`. Selecciónala en la + barra superior. Si no aparece, créala: *Run → Edit Configurations → + → + Flutter*, y pon *Dart entrypoint* = `apps/app_seeds/lib/main.dart`. +4. Elige un dispositivo (emulador Android, o *Linux desktop* / Chrome) en el + selector de dispositivos y pulsa ▶. + +**Línea de comandos** (equivalente): + +```bash +cd apps/app_seeds +flutter devices # ver dispositivos +flutter run -d linux # escritorio Linux (o -d chrome, o un emulador) +``` + +Nota: `flutter run` debe lanzarse desde `apps/app_seeds` (no desde la raíz del +workspace).