docs(block1): status marker + IntelliJ run config
This commit is contained in:
parent
8a19a6c85a
commit
d5eb2242ca
2 changed files with 88 additions and 0 deletions
7
.run/app_seeds (tane).run.xml
Normal file
7
.run/app_seeds (tane).run.xml
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
<component name="ProjectRunConfigurationManager">
|
||||
<configuration default="false" name="app_seeds (tane)" type="FlutterRunConfigurationType" factoryName="Flutter">
|
||||
<option name="filePath" value="$PROJECT_DIR$/apps/app_seeds/lib/main.dart" />
|
||||
<option name="additionalArgs" value="" />
|
||||
<method v="2" />
|
||||
</configuration>
|
||||
</component>
|
||||
81
docs/design/block1-status.md
Normal file
81
docs/design/block1-status.md
Normal file
|
|
@ -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).
|
||||
Loading…
Add table
Add a link
Reference in a new issue