diff --git a/STATUS.md b/STATUS.md index 98ef96a..156d8c1 100644 --- a/STATUS.md +++ b/STATUS.md @@ -1,32 +1,62 @@ # STATUS — Rachita -> Estado vivo del desarrollo. Actualizar al cerrar cada hito. +> Estado vivo del desarrollo. **Actualizar al cerrar cada hito o sesión de trabajo.** +> Si retomas en un chat nuevo: lee CLAUDE.md (arquitectura/convenciones), PRD-Rachita.md (requisitos) y este archivo (dónde vamos), en ese orden. -**Última actualización:** 2026-07-03 +**Última actualización:** 2026-07-03 (sesión 1) -## Sprint 1 (en curso) +--- -| Módulo | Estado | -|---|---| -| 1. Onboarding / Selección de avatar | ✅ Implementado (Compose + MVVM + DataStore) | -| 2. Dashboard de hábitos + racha | ⬜ Pendiente (placeholder en NavHost) | -| 3. Monitoreo de batería (overlay + bloqueo carga) | ⬜ Pendiente | +## Sprint 1 — progreso -## Infraestructura local +| Módulo | Estado | Notas | +|---|---|---| +| 1. Onboarding / Selección de avatar | ✅ **Hecho y verificado en dispositivo real** | Compose + MVVM + DataStore; mascotas 100 % Canvas | +| 2. Dashboard de hábitos + racha | ⬜ Siguiente | Placeholder visible en NavHost; requiere resolver pregunta abierta #1 (ver abajo) | +| 3. Monitoreo de batería (overlay <20 % + bloqueo en carga) | ⬜ Pendiente | Notas técnicas en CLAUDE.md §8 | -- Proyecto Android en `app/` — Gradle 8.9 (wrapper), AGP 8.7.3, Kotlin 2.0.21, JDK 17. -- `compileSdk 35` / `targetSdk 34` / `minSdk 26` (androidx.core 1.15 exige compilar contra 35). -- SDK local vía Homebrew: `/opt/homebrew/share/android-commandlinetools` (`local.properties` no versionado). -- Build verificado con `JAVA_HOME=/opt/homebrew/opt/openjdk@17 ./gradlew assembleDebug`. +### Verificado en dispositivo (2026-07-03, Huawei HBP-LX9, Android 12) +- Onboarding renderiza completo: título, 4 tarjetas, mascotas animadas (breathe/blink), badge "✓ Elegido", CTA. +- Fuentes Baloo 2 / Nunito cargan vía Downloadable Fonts (el equipo tiene Google Play Services). +- Tap avatar → Continuar → persiste en DataStore (`avatar_kind`, `child_name`, `onboarding_completed`) → navega al placeholder del Dashboard. -## Decisiones tomadas en este sprint +## Historial de commits relevantes -- Fuentes Baloo 2 / Nunito por Downloadable Fonts (Google Fonts provider), sin assets empaquetados. -- Mascotas dibujadas 100 % con Canvas de Compose (`MascotIllustrations.kt`); estados tired/sleep se agregarán con el módulo de batería. -- Avatar "Mi dibujo" usa Photo Picker (`PickVisualMedia`) — sin permisos de almacenamiento. +- `6f5bca6` chore(android): scaffold Gradle KTS + version catalog + manifest + recursos base +- `1b5a1f7` feat(theme): paleta PRD §6 + Baloo 2/Nunito + shapes +- `ae8f6b7` feat(onboarding): pantalla de avatar + mascotas Canvas + DataStore + NavHost +- `3f7602e` fix(nav): placeholder de Dashboard con contenido visible (un Surface vacío parecía "pantalla en blanco" en pruebas) -## Próximos pasos +## Entorno de build (esta Mac) -1. Módulo 2: Dashboard (tarjetas de hábitos, check 74 px, racha, confeti) con Room. -2. Módulo 3: BatteryManager receiver + overlay <20 % + Activity de bloqueo en carga. -3. Backend .NET 10 (sprint 2+, ver CLAUDE.md §4). +- **NO hay Android Studio.** JDK: `/opt/homebrew/opt/openjdk@17` (el cask temurin@17 no registró bien; exportar `JAVA_HOME` explícito siempre). +- SDK: `/opt/homebrew/share/android-commandlinetools` (platforms 34+35, build-tools 34, platform-tools). `app/local.properties` ya apunta ahí (no versionado). +- Build: `cd app && JAVA_HOME=/opt/homebrew/opt/openjdk@17 ./gradlew assembleDebug` +- Instalar en dispositivo: mismo comando con `installDebug`. adb en `/opt/homebrew/share/android-commandlinetools/platform-tools/adb`. +- ⚠️ `installDebug` falla intermitente si el teléfono bloquea la pantalla → `adb shell input keyevent KEYCODE_WAKEUP` y reintentar. +- `compileSdk 35` / `targetSdk 34` / `minSdk 26` — androidx.core 1.15 exige compilar contra 35; NO "corregirlo" a 34. + +## Decisiones tomadas + +- Fuentes por Downloadable Fonts (Google Fonts provider), sin .ttf empaquetados. Ojo: `Font(googleFont=...)` se importa de `androidx.compose.ui.text.googlefonts.Font`. +- Mascotas vectoriales por código en `MascotIllustrations.kt`; estados tired/sleep se agregan con el módulo de batería. +- Avatar "Mi dibujo" usa Photo Picker (`PickVisualMedia`) — cero permisos de almacenamiento. Recorte orgánico (AV-02) pendiente de pulido. +- AV-08 (nombre configurable): ViewModel ya persiste `childName`, pero el onboarding no tiene campo de texto (el prototipo lo trata como prop, default "Lucía"). + +## Deuda / pulido pendiente (detectado en prueba de dispositivo) + +1. **Gate de onboarding**: la app siempre abre en onboarding aunque `onboarding_completed=true`; debe saltar directo al Dashboard (hacerlo junto con módulo 2). +2. Orejas de mascotas recortadas dentro de las tarjetas; conejo se ve comprimido (headroom del Canvas en aspect ratio no cuadrado). +3. Layout del onboarding apretado en pantalla de teléfono — diseñado para tablet 1280×800 (target real). Decidir si se adapta o se asume tablet-only. +4. Migrar `kotlinOptions` deprecado ya hecho; sin otras warnings relevantes. + +## Preguntas abiertas que bloquean el módulo 2 (de CLAUDE.md §11) + +1. **¿La racha se pierde completa al fallar un día, o hay "congelador" desde v1?** (PRD recomienda: v1 simple, congelador en v1.1.) ← decidir antes de implementar DA-11. +2. ¿Horario límite individual por hábito? (afecta modelo Room del módulo 2) + +## Próximos pasos (en orden) + +1. Módulo 2 — Dashboard: entidades Room (`Habit`, `HabitLog`), tarjetas de hábitos con check 74 px, racha con llama animada, confeti al completar todo, gate de onboarding. +2. Módulo 3 — Batería: `ACTION_BATTERY_CHANGED` receiver, overlay <20 %, Activity de bloqueo en carga con verificación real. +3. Sprint 2+: backend .NET 10 + deploy PapuTec (CLAUDE.md §4), CI Gitea Actions.