Files
h-bitosInfantiles/STATUS.md
T

5.6 KiB
Raw Blame History

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 🟨 Implementado, verificación en dispositivo a medias Ver "pendiente de verificar" abajo
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: gate de arranque OK (entra directo con onboarding completado), saludo "¡Hola, Lucía!", fecha es-MX real, "te quedan 3 hábitos" (seed Room funcionó), sidebar completo (mascota sin orejas cortadas, Nv./XP/racha), columna derecha (En equipo, mensaje de mascota, Museo Diario).

⚠️ Pendiente de verificar (bloqueado por teléfono con PIN al final de la sesión)

En la única captura del dashboard NO se veían las 3 tarjetas de hábitos ni la tarjeta "Tu racha"; todo lo demás renderizaba. Puede ser un frame capturado a destiempo (EMUI) o un bug real de layout. Primer paso de la próxima sesión: relanzar la app y mirar la pantalla — si las tarjetas aparecen, cerrar el tema; si no, bisecar con cajas de color en CenterColumn/StreakCard. Nota: la regla de racha y el toggle están cubiertos por 6 tests unitarios verdes (StreakCalculatorTest).

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

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. ⚠️ Verificar tarjetas de hábitos + "Tu racha" en pantalla (ver arriba — prioridad 1 próxima sesión).
  2. 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.
  3. Layout diseñado para tablet 1280×800; en el teléfono de prueba (373 dp de alto útil) queda apretado. El target real es tablet — decidir si se adapta responsive o se asume tablet-only.
  4. confettiOn (DA-05) hoy está fijo en true; se conecta cuando exista pantalla de Ajustes con gate parental.
  5. Campo de nombre en onboarding (AV-08): el ViewModel ya lo persiste; falta el input en UI.

Próximos pasos (en orden)

  1. Resolver el pendiente de verificación del dashboard (arriba).
  2. 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).
  3. Sprint 2+: backend .NET 10 + deploy PapuTec (CLAUDE.md §4), CI Gitea Actions.