Nueva tabla telemetry_active(install_id, day) (create_all la crea). add_telemetry
hace upsert (install_id, day) si viene install_id. El summary añade installsTotal
(únicas de siempre), installsActive (en el periodo) y dauToday. Tests: dos ids
únicos + uno duplicado → 2 únicas.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
add_telemetry cuenta 'ver:<versión>' por envío (usa app_version, que la app ya
mandaba pero se ignoraba). El summary lo devuelve como una fila más; la app lo
agrupa aparte como distribución de versiones. Test actualizado.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
telemetry_daily gana columna `seconds` (migración idempotente ALTER ADD COLUMN
IF NOT EXISTS para el Postgres ya desplegado; create_all para SQLite fresco). El
POST acepta seconds_by_module y lo agrega por clave (tope 86400/clave/envío); el
summary suma y devuelve seconds por módulo/vista. Las claves ya eran genéricas,
así que Aprende ('aprende', 'aprende:<tema>') y las vistas ('today', '__other__')
entran sin cambios de esquema. Tests actualizados.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Tabla telemetry_daily (day, module, active, opens) sin identificador de usuario
ni contenido: solo cuenta cuántas instalaciones tienen cada módulo activo y
cuántas veces lo abren (fila __submissions__ = envíos del día). El POST agrega
por módulo antes de tocar la BD (evita PK duplicada intra-request). create_all
crea la tabla nueva; no necesita migración ALTER. Tests en SQLite en memoria.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>