Product-name mentions → Tane; backup-file extension .tanemaki → .tane; website tanemaki.app → tane.comunes.org. Etymology-bearing docs (README, VISION, PLAN, CLAUDE, intros) handled separately.
4.9 KiB
Tane — 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 y 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.
Cada historia se entrega con sus tests (unit/widget/integration) — casi-TDD, sin pruebas manuales como red de seguridad. Ver testing.md. Sin tests, la historia no está hecha.
Pasos
-
Prerequisitos (máquina): Flutter SDK actualizado, un emulador o dispositivo. Quitar los locks del bare si hiciera falta (
rm -f ~/repos/tane.git/*.lock). -
Scaffolding del workspace (
pub workspaces):pubspec.yamlraíz conworkspace:listandopackages/commons_coreyapps/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 createcon--org org.comunes --project-name tane(applicationIdorg.comunes.tane).
-
Base de datos (Drift + SQLCipher):
- Añadir
drift,drift_flutter/sqlite3, y cifrado víasqlcipher_flutter_libs. - Definir tablas de la Fase 1 desde
data-model.md:Variety,Lot,Movement,Species,SpeciesCommonName,VarietyVernacularName,Attachment,ExternalLink,GerminationTest. Columnas comunes (UUIDv7,created_at, HLCupdated_at,last_author,is_deleted,schema_row_version). schemaVersion = 1. Exportar esquema adrift_schemas/drift_schema_v1.json. Dejar el andamio de migraciones step-by-step + test de migración.- Tipo
Quantitycompartido (kind + amount? + label);quantity_kindcomo enum estable (pod,cob,head,packet,handful,grams,count…), etiqueta localizada.
- Añadir
-
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.)
-
i18n: configurar
flutter_localizations+intl(oslang). Ninguna cadena hardcodeada. Arrancar con ES y EN. -
UI del inventario (spec = mockups en
../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
labelobligatorio. - Accesibilidad: objetivos grandes, tipografía grande, icono + palabra.
- Lista de inventario (
-
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. -
Tests y CI (transversal, no al final): ver
testing.md. Como mínimo en este sprint: unit decommons_core(Quantity, columnas comunes, UUIDv7/HLC), test de migración Drift, test de "no hay texto en claro" en el fichero de BD, widget tests de la lista y del alta rápida, y un integration test del flujo "alta → persiste cifrada → reabrir → sigue ahí". Montar CI (analyze + test + cobertura) desde el primer commit de código. -
Verificación final:
flutter analyzelimpio, toda la suite en verde en emulador, cobertura publicada. 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.