79 lines
5.9 KiB
Markdown
79 lines
5.9 KiB
Markdown
# STATUS — Rachita
|
||
|
||
> 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 (sesión 2)
|
||
|
||
---
|
||
|
||
## Sprint 1 — progreso
|
||
|
||
| 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 | ✅ **Hecho y verificado en dispositivo real, punta a punta** | Toggle → contador → racha → XP → banner → persistencia tras force-stop |
|
||
| 3. Monitoreo de batería (overlay <20 % + bloqueo en carga) | ⬜ Siguiente | `BatteryStatusMonitor` ya existe como base; notas en CLAUDE.md §8 |
|
||
|
||
### Verificado en dispositivo (2026-07-03, Huawei HBP-LX9, Android 12)
|
||
- Onboarding completo: título, 4 tarjetas, mascotas animadas, badge, CTA, persistencia y navegación.
|
||
- Fuentes Baloo 2 / Nunito cargan vía Downloadable Fonts (el equipo tiene Google Play Services).
|
||
- Dashboard punta a punta: gate de arranque, seed de 3 hábitos, tarjetas con check animado + "¡Hecho!",
|
||
contador "te quedan N", racha 0→1 con V del viernes palomeada, banner "¡Racha asegurada hoy! 🔥",
|
||
XP 0→30/500, mensaje celebratorio de la mascota, chip de batería real (verde cargando), singular/plural
|
||
de racha, y persistencia completa tras force-stop + relanzamiento.
|
||
|
||
### 🔎 Lecciones EMUI de esta sesión (para futuras pruebas en este equipo)
|
||
- El header original (Row con `Alignment.Bottom` + `SpaceBetween` + texto con composable-en-template)
|
||
medía ~270 dp fantasma SOLO en este dispositivo → la lista quedaba en altura 0 y las tarjetas ni se
|
||
componían. Diagnóstico vía `uiautomator dump` (bounds de semántica), no vía screenshots.
|
||
- Los taps de `adb input tap` a <40 px del borde inferior se los come la zona de gestos de EMUI.
|
||
- `adb shell settings put global stay_on_while_plugged_in 7` activado para que no se bloquee la pantalla
|
||
durante desarrollo (revertir con valor 0 cuando termine el sprint).
|
||
|
||
## Decisiones de producto tomadas en sesión 2
|
||
|
||
- **Racha v1 (DA-11):** se pierde completa al fallar un día; congelador pospuesto a v1.1 (recomendación del PRD §16.1).
|
||
- **Horarios por hábito:** el subtítulo ("A las 9:00 pm") es copy descriptivo; todo hábito cuenta antes de medianoche.
|
||
- **XP:** derivado 100 % de logs (10 XP por hábito hecho, nivel cada 500) — reversible y sin drift, igual que la racha. Sin tabla de recompensas aún (pregunta abierta §16.5).
|
||
- **Racha mostrada:** incluye hoy en cuanto se completa todo (feedback inmediato); desmarcar la revierte.
|
||
|
||
## Historial de commits relevantes
|
||
|
||
- `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)
|
||
- `28f2359` feat(habits): Room (Habit/HabitLog) + StreakCalculator + 6 tests
|
||
- `33de656` feat(battery): BatteryStatusMonitor (callbackFlow sobre sticky broadcast)
|
||
- `1d34b78` feat(dashboard): módulo 2 completo — 3 columnas, checks animados, confeti, gate
|
||
- `0eb4133` fix(dashboard): header a prueba de EMUI + weight en lista + singular de racha
|
||
|
||
## Entorno de build (esta Mac)
|
||
|
||
- **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
|
||
|
||
1. Avatar personalizado ("Mi dibujo") aún no se muestra como imagen (falta Coil o similar en el catálogo); hoy cae al marco punteado. Recorte orgánico AV-02 pendiente.
|
||
2. Layout diseñado para tablet 1280×800; en el teléfono de prueba (373 dp de alto útil) queda apretado y el pill "0/3 hoy" se recorta a la derecha. El target real es tablet — revisar en tablet física antes de optimizar.
|
||
3. `confettiOn` (DA-05) hoy está fijo en true; se conecta cuando exista pantalla de Ajustes con gate parental. Confeti no confirmado visualmente en captura (el trigger sí disparó — banner y mensaje aparecieron); confirmar a ojo en dispositivo.
|
||
4. Campo de nombre en onboarding (AV-08): el ViewModel ya lo persiste; falta el input en UI.
|
||
|
||
## Próximos pasos (en orden)
|
||
|
||
1. Módulo 3 — Batería: overlay <20 % con mascota cansada (estados tired/sleep en `MascotIllustrations`), Activity de bloqueo en carga con verificación real de desconexión (`BatteryStatusMonitor` ya provee el flow).
|
||
2. Sprint 2+: backend .NET 10 + deploy PapuTec (CLAUDE.md §4), CI Gitea Actions.
|