Handoff: CLAUDE.md, AGPL-3.0 LICENSE, first-sprint plan; reconcile docs (one-key identity, Nostr, AGPL, varilla/Kew SID, blockchain nuance)
This commit is contained in:
parent
465bef8691
commit
23c12ac60c
3 changed files with 133 additions and 0 deletions
48
docs/design/first-sprint.md
Normal file
48
docs/design/first-sprint.md
Normal file
|
|
@ -0,0 +1,48 @@
|
|||
# Tanemaki — Primer sprint (Fase 1: inventario)
|
||||
|
||||
*Guía de arranque para desarrollar en **Claude Code** (en la máquina, donde Flutter corre y git funciona). Objetivo: un **inventario usable, offline y cifrado**. Nada de capa social todavía. Convenciones y decisiones en [`../../CLAUDE.md`](../../CLAUDE.md) y [`open-decisions.md`](open-decisions.md).*
|
||||
|
||||
## Definición de "hecho" del sprint
|
||||
|
||||
Una persona puede: abrir la app, **añadir una semilla en 20 s** (etiqueta + foto + cantidad), verla en una lista por categorías, abrir su ficha, editarla con campos avanzados plegados, y que **todo persista cifrado** entre reinicios. Multilingüe (al menos ES/EN). Corre en un dispositivo/emulador real.
|
||||
|
||||
## Pasos
|
||||
|
||||
0. **Prerequisitos (máquina):** Flutter SDK actualizado, un emulador o dispositivo. Quitar los locks del bare si hiciera falta (`rm -f ~/repos/tane.git/*.lock`).
|
||||
|
||||
1. **Scaffolding del workspace** (`pub workspaces`):
|
||||
- `pubspec.yaml` raíz con `workspace:` listando `packages/commons_core` y `apps/app_seeds`.
|
||||
- `packages/commons_core`: paquete Dart puro (sin Flutter aún) — de momento casi vacío, solo la estructura y un TODO; **no** meter capa social todavía.
|
||||
- `apps/app_seeds`: `flutter create` con `--org org.comunes --project-name tane` (applicationId `org.comunes.tane`).
|
||||
|
||||
2. **Base de datos (Drift + SQLCipher):**
|
||||
- Añadir `drift`, `drift_flutter`/`sqlite3`, y cifrado vía `sqlcipher_flutter_libs`.
|
||||
- Definir tablas de la Fase 1 desde [`data-model.md`](data-model.md): `Variety`, `Lot`, `Movement`, `Species`, `SpeciesCommonName`, `VarietyVernacularName`, `Attachment`, `ExternalLink`, `GerminationTest`. Columnas comunes (UUIDv7, `created_at`, HLC `updated_at`, `last_author`, `is_deleted`, `schema_row_version`).
|
||||
- `schemaVersion = 1`. Exportar esquema a `drift_schemas/drift_schema_v1.json`. Dejar el andamio de migraciones step-by-step + test de migración.
|
||||
- Tipo `Quantity` compartido (kind + amount? + label); `quantity_kind` como enum estable (`pod`, `cob`, `head`, `packet`, `handful`, `grams`, `count`…), etiqueta localizada.
|
||||
|
||||
3. **Identidad y cifrado (mínimo para la Fase 1):**
|
||||
- Generar una **semilla raíz** (compatible Duniter; curva a confirmar) al primer arranque; guardarla en el almacén del sistema. Todavía sin red.
|
||||
- Llave simétrica de la BD en el keystore; abrir la BD cifrada con ella. **Nada en claro en disco.**
|
||||
- (La derivación secp256k1/Nostr y el QR de recuperación pueden ser historias posteriores del sprint, pero deja el hueco en el diseño de identidad.)
|
||||
|
||||
4. **i18n:** configurar `flutter_localizations` + `intl` (o `slang`). **Ninguna cadena hardcodeada.** Arrancar con ES y EN.
|
||||
|
||||
5. **UI del inventario** (spec = mockups en [`../mockups/`](../mockups/)):
|
||||
- **Lista de inventario** (`06_inventory`): ítems por categoría, con foto/inicial, buscar.
|
||||
- **Alta rápida**: etiqueta + foto (cámara) + cantidad cualitativa. 20 segundos. Resto plegado ("Añadir más…").
|
||||
- **Ficha de ítem** (`07_inventory_item`) con pestañas y **edición** (`071`): nombres (propio/vernáculos/científico opcional autocompletado del catálogo), lotes (año + unidad), notas, enlaces, adjuntos.
|
||||
- Progressive disclosure en todo: solo `label` obligatorio.
|
||||
- Accesibilidad: objetivos grandes, tipografía grande, icono + palabra.
|
||||
|
||||
6. **Catálogo de especies (semilla del bundle):** empezar con un CSV/JSON pequeño curado (unas pocas hortícolas ibéricas) con `scientific_name` + `wikidata_qid` + `gbif_key` + nombres comunes ES/EN, para probar el autocompletado. La "varilla" y Kew SID vienen después.
|
||||
|
||||
7. **Verificación:** `flutter analyze` limpio, `flutter test` (incl. test de migración), y arrancar en dispositivo. Añadir el texto canónico de la licencia: `curl -o LICENSE https://www.gnu.org/licenses/agpl-3.0.txt`.
|
||||
|
||||
## Fuera de alcance de este sprint (no hacer)
|
||||
|
||||
Ofertas, mensajería, relays, Nostr, red de confianza, Ğ1, sincronización entre dispositivos, backup completo (más allá de dejar el formato pensado), reconocimiento por foto. Todo eso es Bloque 2 / fases posteriores.
|
||||
|
||||
## Orden sugerido de historias
|
||||
|
||||
1 → 2 → 4 → 5 (lista + alta rápida) → 3 (cifrado) → 5 (ficha/edición) → 6 (catálogo) → 7 (verificación). El cifrado (3) puede ir antes si se prefiere no reescribir la apertura de la BD después.
|
||||
Loading…
Add table
Add a link
Reference in a new issue