# Roadmap de bandQamp

Lee este plan para distinguir lo que ya puedes usar de lo que todavía es una propuesta. Una propuesta no tiene por qué llegar en la próxima versión.

Base de referencia: manifiesto **0.5.2**, código local revisado el **9 de noviembre de 2026**. Este documento distingue capacidades implementadas, trabajo parcial y propuestas; no certifica la versión publicada ni pruebas funcionales completas.

## Revisión 0.5.1 implementada

- Mantén pulsado el botón de eliminar durante 2 segundos; soltar antes cancela. Ctrl + clic (⌘ en Mac) elimina inmediatamente. La pista activa sigue protegida.
- Los enlaces de álbumes y canciones se guardan sin rastreo ni fragmentos. La limpieza también se aplica a la cola y al historial existentes, conservando los parámetros del audio y las carátulas.
- Desde Historial, añade una pista al principio o al final de la cola, aunque ya exista. Si hay una pista activa, se coloca después de ella.

Pendiente: comprobar estas interacciones en Chrome antes de empaquetar y publicar.


## Estado de partida

| Área | Estado en el código | Trabajo restante |
| --- | --- | --- |
| Cola y bloques | Persistencia, arrastre, menú de movimientos, operaciones de bloque y protección de la pista activa. | Verificar combinaciones con reproducción, paginación y snooze. |
| Reproducción | Audio offscreen, popup, pestaña completa, ventana flotante y Media Session. | Verificar recuperación y sincronización entre superficies. |
| Historial | Registro al 25 %, integración con anterior/siguiente y vista de 30 días. | Ampliaciones de búsqueda y filtros, si se priorizan. |
| Streams | Detección de caducidad, renovación y reintento manual. | Verificar fallos de red, agotamiento de reintentos y recuperación. |
| Last.fm | Autorización, now playing, scrobbling, love/unlove y consulta de favoritos. | Estabilizar la sincronización y validar con cuenta real. |
| Bandcamp Daily | Integración opcional implementada. | Verificar distintas estructuras de artículos y reproductores incrustados. |
| Iconografía | Biblioteca SVG en `src/ui/`, máscaras CSS y estados visuales. | Auditar consistencia, accesibilidad y recursos duplicados en la web. |
| Temas | Modern, Flat, claro/oscuro/automático y paquetes JSON personalizados. | Verificar contraste, importaciones y coherencia entre superficies. |
| Atajos y feedback | Acciones con Ctrl/⌘, volumen con Shift (10 puntos) o Ctrl/⌘ (25 puntos) y marcas visuales, copia de enlaces y feedback inline. | Verificar teclado, foco y movimiento reducido. |
| Datos y logs | Importación/exportación de cola e historial y registro descargable. | Verificar datos malformados, duplicados y contenido de diagnóstico. |
| Crossfade | Mezcla de dos canales, precarga, pausa/reanudación, volumen y protección de snooze implementados localmente. | Validar streams reales de Bandcamp y Last.fm antes de publicar. |
| Web | Portada, versiones, manuales, privacidad, idiomas y consentimiento analítico. | Mantener contenido y traducciones alineados con el producto. |

La migración general de iconos a SVG y la introducción de temas ya están implementadas. No se consideran tareas futuras desde cero.

## Trabajo local en curso

En la revisión de referencia había cambios sin confirmar en `src/background.js` para consultar favoritos con nombres originales y normalizados, valorar la fiabilidad de las respuestas y conservar la caché cuando la consulta no aporta un estado fiable. También había cambios de contenido y metadatos SEO en la portada, manuales, privacidad y sitemap.

Estos cambios requieren revisión y validación antes de considerarlos cerrados. No se asigna aquí una nueva versión ni una fecha de publicación.

## Prioridad 1: estabilizar el comportamiento existente

### Favoritos de Last.fm

- [ ] Validar love y unlove con nombres originales de Bandcamp y nombres normalizados por Last.fm.
- [ ] Comprobar cambios realizados directamente en Last.fm y su actualización mediante Ctrl/⌘ + corazón.
- [ ] Diferenciar respuesta negativa confirmada, consulta fallida y dato desconocido, sin presentar la caché como una confirmación remota.
- [ ] Verificar errores de autorización, red y respuestas incompletas.
- [ ] Comprobar el estado visual tras cambiar de pista, cerrar/reabrir el popup y reiniciar el navegador.

**Criterio de cierre:** el botón y su feedback reflejan el resultado confirmado o comunican que no pudo verificarse; una consulta fallida no elimina un favorito conocido.

### Cola, reproducción y recuperación

- [ ] Probar arrastre y movimientos de pistas/bloques al principio y final, con la pista activa protegida.
- [ ] Verificar anterior, siguiente, eliminación, vaciado y fin natural de pista sin entradas duplicadas ni pérdidas inesperadas.
- [ ] Comprobar snooze después de reordenar o eliminar elementos.
- [ ] Verificar pausa, reanudación, seek y controles multimedia del sistema en las tres vistas del reproductor.
- [ ] Comprobar recuperación del service worker, reapertura del popup y reinicio del navegador.
- [ ] Validar streams caducados, pérdida de conexión y reintentos fallidos con feedback recuperable.
- [x] Implementar CTRL + clic para agregar duplicados desde Bandcamp y Daily, con iconos naranjas e identidad independiente por copia.
- [x] Separar el mantenimiento de streams y carátulas de los comandos de reproducción, en lotes de 5, con timeout y protección frente a resultados antiguos. Prueba automatizada con 1500 pistas.
- [ ] Validar el mantenimiento de colas largas con Bandcamp real y conexiones lentas.
- [ ] Probar altas consecutivas desde varias pestañas y sincronización de badge y cola.

**Criterio de cierre:** cola, historial, audio y controles mantienen un estado coherente en estos escenarios, sin reproducción o avances duplicados.

### Validar el crossfade implementado

- [x] Mezclar dos canales al final de una pista y desactivar la mezcla con 0 segundos.
- [x] Precargar la siguiente pista y conservar el avance normal si no está lista.
- [x] Coordinar pausa, reanudación, volumen, seek, saltos manuales y límite de snooze.
- [x] Identificar las reproducciones y ordenar las mutaciones para descartar eventos antiguos y evitar avances duplicados.
- [x] Añadir pruebas automatizadas del motor y de su coordinación con el background, historial y scrobbling simulado.
- [x] Comprobar solapamiento con archivos de audio reales en el navegador.
- [ ] Validar con streams de Bandcamp y una cuenta real de Last.fm, incluyendo red lenta y errores de CDN.

**Criterio de cierre de publicación:** completar la validación externa; las pruebas locales no certifican la integración con los servicios reales.

## Prioridad 2: coherencia visual y accesibilidad

- [ ] Auditar nombres accesibles, tooltips, foco visible y orden de tabulación en popup, opciones, historial, logs y controles inyectados.
- [ ] Verificar alternativas de teclado para las acciones de reordenación y acceso a menús.
- [ ] Revisar contraste y estados hover/focus/disabled en Modern, Flat y ambos modos de color.
- [ ] Comprobar mensajes de error y estados de favorito sin depender exclusivamente del color.
- [ ] Verificar títulos largos, escalado, vista compacta/completa y movimiento reducido.
- [ ] Revisar equivalencia de Ctrl y ⌘ y restauración de iconos al perder el foco.
- [ ] Mantener un catálogo de iconos compartido y revisar duplicaciones entre `src/ui/` y `web/assets/icons/`.

**Criterio de cierre:** las acciones principales son comprensibles y accesibles con teclado, con estados consistentes entre vistas y temas.

### Mapa de interacciones que debe mantenerse

| Superficie | Acciones y estados principales |
| --- | --- |
| Bandcamp y Daily | Añadir pista/álbum al final o como siguiente; cargando, añadido, en cola, eliminado, sin preview y error. |
| Reproductor | Anterior, pausa/reanudación, siguiente, seek, volumen, enlace/copia de URL, expansión y ventana flotante. |
| Cola | Arrastre, menú de movimientos, operaciones de bloque, eliminación, vaciado, paginación y límite de snooze. |
| Favoritos | Desconectado, consulta pendiente, favorito/no favorito, escritura, refresco y fallo de verificación. |
| Opciones | Idioma, modo de color, tema visual, importación de tema y autorización de Last.fm. |
| Historial | Lista reciente, vista de 30 días y apertura/copia del enlace de la pista. |
| Logs | Activar registro, actualizar, limpiar y descargar eventos. |

## Prioridad 3: documentación, web y publicación

- [x] Actualizar README y roadmap con la arquitectura y capacidades actuales.
- [x] Documentar el funcionamiento del crossfade y la validación externa pendiente.
- [ ] Revisar manuales y textos de la web para que no anuncien funciones incompletas.
- [ ] Mantener versiones, changelog y traducciones consistentes en los cinco idiomas.
- [ ] Revisar los cambios locales de metadatos, datos estructurados, enlaces de idioma y sitemap.
- [ ] Comprobar el consentimiento analítico y la correspondencia entre privacidad, permisos y comportamiento real.
- [ ] Definir un procedimiento reproducible de empaquetado con los archivos necesarios para la extensión.
- [ ] Registrar qué comprobaciones se han realizado antes de cada publicación.

**Criterio de cierre:** manifiesto, paquete, documentación y web describen la misma entrega; se conocen las verificaciones realizadas y las limitaciones restantes.

## Validación propuesta para cada entrega

Hay pruebas automatizadas de volumen, crossfade y coordinación con el background (`node --test tests/*.test.mjs`); no hay proceso de build configurado. Esta lista es un plan de validación, no un registro de pruebas ya superadas.

1. Comprobar sintaxis JavaScript, manifiesto, referencias a recursos y diferencias de Git.
2. Cargar la extensión en Chrome y verificar pistas, álbumes y Daily con previews disponibles.
3. Ejecutar los escenarios de cola, audio, snooze e historial de la prioridad 1.
4. Verificar autorización, now playing, scrobbling y favoritos con una cuenta real de Last.fm.
5. Probar importación/exportación, temas JSON y datos inválidos sin perder el estado previo.
6. Revisar las interfaces con teclado, ambos modos de color, idiomas y movimiento reducido.
7. Comprobar web, manuales, privacidad y contenido del paquete antes de publicar.

Para futuras pruebas automatizadas, priorizar lógica de cola/bloques, normalización de datos, firma de Last.fm y transiciones de estado. Las comprobaciones de sintaxis no sustituyen la reproducción ni las integraciones reales.

## Ideas posteriores, sin compromiso de versión

- Búsqueda y filtros adicionales en el historial.
- Opciones de densidad visual si las vistas actuales lo requieren.
- Separar responsabilidades del background y del popup para facilitar mantenimiento y pruebas, conservando su comportamiento.

Estas propuestas se valorarán después de estabilizar las funciones existentes. No hay fechas ni números de versión asignados.
