|
|
# Implementación de la revisión de Senza Paura
|
|
|
|
|
|
Fecha: 11 de septiembre de 2026. Rama: `codex/redisenio-dominio-musical`.
|
|
|
|
|
|
Este documento registra los cambios realizados a partir del
|
|
|
[informe de auditoría](analisis-aplicacion-2026-09-11.md). El informe original
|
|
|
se conserva para poder contrastar los hallazgos con la implementación.
|
|
|
|
|
|
## Resultado
|
|
|
|
|
|
Se han corregido los problemas de autorización, conservación de compras y
|
|
|
créditos, entrega MP3, publicación de versiones, caché entre procesos, apertura
|
|
|
de pagos, mantenimiento, límites de subida, modal y textos. El despliegue
|
|
|
prepara ahora las dos aplicaciones y conserva una release anterior recuperable.
|
|
|
|
|
|
El panel añade créditos completos, portadas y fotografías con previsualización
|
|
|
y recorte central, audio propio por versión, revisión del catálogo, conciliación
|
|
|
de pagos y concesiones manuales de suscripción. Las listas se pueden renombrar,
|
|
|
reordenar y eliminar con confirmación.
|
|
|
|
|
|
La implementación está en el repositorio. No se ha desplegado en el servidor ni
|
|
|
se han aplicado las nuevas migraciones a la base compartida. Las pruebas de
|
|
|
PostgreSQL utilizan tablas y funciones temporales de sesión, con Stripe simulado.
|
|
|
No se han realizado cobros, reembolsos ni envíos de correo.
|
|
|
|
|
|
## Correcciones por hallazgo
|
|
|
|
|
|
| Hallazgo | Cambio implementado | Límite o puesta en marcha |
|
|
|
| ------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------- |
|
|
|
| H01 Autorización | El hook exige administrador antes de resolver rutas protegidas; las acciones repiten la guarda. | Pruebas unitarias de roles y peticiones HTTP anónimas, tanto HTML como JSON. |
|
|
|
| H02 Escucha interceptada | El ejemplo Nginx envía `/escucha` a Node, que autoriza y sirve Range. | Sustituir la configuración efectiva al desplegar. |
|
|
|
| H03 Despliegue incompleto | Builds de sitio y panel, releases separadas, rutas persistentes, entorno comprobado, migración en destino y restauración del enlace anterior ante fallo. | Requiere instalar las dos unidades y ensayar la recuperación en el servidor. |
|
|
|
| H04 Créditos ausentes | El auditor denuncia publicaciones sin intérprete; el panel permite asignar créditos y muestra las incidencias. | No se han inventado intérpretes: faltan los nombres reales de las 11 canciones existentes. |
|
|
|
| H05 Pérdida de créditos | El guardado conserva instrumento y acreditación de los intérpretes principales que permanecen seleccionados. | Quitar explícitamente un intérprete elimina ese crédito. |
|
|
|
| H06 Biblioteca incompleta | La biblioteca consulta compras, títulos históricos y representaciones, independientemente de la visibilidad del catálogo. | Incluye versiones publicadas o retiradas; las versiones en borrador no se entregan. |
|
|
|
| H07 Entrega incorrecta | Cada nuevo ingreso genera una descarga MP3 separada. Un MP3 real se conserva; otros códecs se convierten a MP3 a 320 kbps. | El catálogo existente ya tenía másteres MP3; se aceptan como entrega mientras no haya una representación explícita. |
|
|
|
| H08 Publicación desigual | Se validan las versiones en transacción. Nuevas guardas diferidas de PostgreSQL exigen intérprete principal, escucha, letra cuando corresponde y MP3 comercial. | Aplicar `0025_guardas_publicacion.sql`. Las importaciones deben completar las relaciones en la misma transacción. |
|
|
|
| H09 Caché desincronizada | La memoria se comparte dentro de una petición, sin caché global de 60 segundos. | Los datos ya mostrados en una pestaña cambian al refrescar o navegar; no se ha añadido actualización en directo. |
|
|
|
| H10 Pagos duplicados | Intención persistida antes de Stripe, clave idempotente estable, sesión reutilizable, datos de precio congelados y creación idempotente de pedido. | Aplicar `0024_intenciones_pago.sql`. Una intención incierta caducada exige conciliación; no se sustituye silenciosamente. |
|
|
|
| H11 Webhooks bloqueados | El webhook atraviesa el modo de espera y mantiene la verificación de firma. | No abre otras rutas API. |
|
|
|
| H12 Límite multipart | Archivo máximo de 256 MiB y cuerpo del panel de 260 MiB; configuración Nginx y documentación alineadas. | Procesado síncrono limitado a uno por proceso; el proxy administrativo permite 900 segundos. |
|
|
|
| H13 Modal horizontal | Al ocultar la ilustración, el marco pasa a una sola columna. | Verificado a 812 × 375. |
|
|
|
| H14 Tamaño del pack | La biblioteca usa `CANCIONES_POR_PACK`. | La tienda mantiene packs de diez canciones. |
|
|
|
| H15 Señal de calidad | Vitest conserva módulos virtuales de Kit sin arrancar su servidor SSR; formato corregido y nuevas regresiones. | Las pruebas PostgreSQL se ejecutan explícitamente con `TEST_DATABASE_URL`; no dependen del catálogo de producción. |
|
|
|
| H16 Documentación | README corregido a PostgreSQL, panel independiente, rutas legales y procedimiento nuevo. | La configuración fiscal y los textos comerciales siguen siendo decisiones del proyecto. |
|
|
|
|
|
|
Se corrigió además una comprobación de favoritos que no esperaba la promesa de
|
|
|
`obtenerCancion`, y se reforzó la compensación de archivos: una respuesta incierta
|
|
|
de COMMIT no provoca la eliminación de medios que pueden haber quedado registrados.
|
|
|
|
|
|
## Refactorizaciones
|
|
|
|
|
|
- **R01:** las rutas editoriales y de cuenta dejan de recibir el catálogo completo.
|
|
|
La biblioteca comprada tiene su propio modelo. El pago obtiene las compras en
|
|
|
lote y reutiliza la consulta de catálogo de la petición. En las pantallas
|
|
|
musicales se conserva el contrato compartido para tarjetas, discos y reproductor;
|
|
|
no se ha sustituido todo el catálogo por un sistema de consultas paginadas.
|
|
|
- **R02:** se separan validadores de canciones, registro y compensación de audio,
|
|
|
detalle del título de una fila, biblioteca comprada y editor de listas. Los
|
|
|
componentes grandes de capítulos y géneros mantienen su estructura; no se han
|
|
|
dividido por tamaño sin una responsabilidad clara que extraer.
|
|
|
- **R03:** publicación protegida también en PostgreSQL, validación compartida de
|
|
|
canciones y créditos, servicio de Checkout e ingreso común de las representaciones.
|
|
|
- **R04:** manifiestos de procesado con estados, límite de concurrencia por proceso,
|
|
|
publicación sin sobrescritura y herramienta de reconciliación. Conserva archivos
|
|
|
registrados incluso si se pierde la respuesta de la transacción. No es todavía
|
|
|
una cola distribuida con trabajadores independientes; esa ampliación corresponde
|
|
|
a un uso frecuente o a regeneraciones masivas, como indicaba la auditoría.
|
|
|
|
|
|
## Funciones añadidas
|
|
|
|
|
|
| Propuesta | Disponible |
|
|
|
| --------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
|
| A01 Alta musical | Artistas seleccionables en el alta; créditos con papel, instrumento, acreditación y orden; audio de versiones; imágenes de canción, álbum o artista con previsualización y recorte central. La imagen se asigna desde su pantalla del panel. |
|
|
|
| A02 Compras y pedidos | Biblioteca con formato, tamaño y disponibilidad; pedidos pendientes, pagados y cancelados en la cuenta; conciliación en el panel y consulta del importe reembolsado en Stripe. Los reembolsos se tramitan en Stripe; no se ha automatizado la retirada de derechos ni una descarga ZIP. |
|
|
|
| A03 Listas | Renombrado, borrado confirmado y orden mediante botones accesibles. La propiedad se comprueba en servidor. |
|
|
|
| A04 Suscripción | Concesión manual por cuenta y días, vencimiento, revocación y consulta del último periodo. La cuenta explica cómo solicitar o gestionar el acceso. No hay contratación ni renovación con cobro recurrente. |
|
|
|
| A05 Descubrimiento | Llamada de primera escucha antes del tocadiscos en móvil y enlace a intérpretes desde Música. |
|
|
|
| A06 Operación | Estado del catálogo con créditos, archivos de escucha y descarga, ondas, portadas y trabajos de procesado pendientes. Detecta existencia física; no certifica la calidad artística ni decodifica todo el almacén en cada visita. |
|
|
|
|
|
|
## Validación
|
|
|
|
|
|
- Tipos: sitio y panel sin errores ni advertencias de Svelte.
|
|
|
- Formato y ESLint: comprobados sobre el repositorio.
|
|
|
- Pruebas unitarias y de componentes: 402 aprobadas.
|
|
|
- PostgreSQL: 11 pruebas aprobadas en tablas y funciones TEMP. Incluyen reintento
|
|
|
de pago incierto, conservación de compras retiradas, créditos, publicación,
|
|
|
propiedad de listas, suscripción manual e imágenes reales procesadas con ffmpeg.
|
|
|
- Builds de producción: sitio y panel terminan con salida 0.
|
|
|
- Navegador: 61 pruebas aprobadas. Navegación y responsive existentes, nueva portada móvil, modal
|
|
|
horizontal, carga del taller y protección HTTP del panel. Se excluye la prueba
|
|
|
que solicita un código por correo.
|
|
|
- Shell: los scripts de despliegue pasan la comprobación de sintaxis de Bash.
|
|
|
|
|
|
Las comprobaciones de navegador necesitaron acceso a la base desde el proceso
|
|
|
local de preview. Los primeros intentos con acceso de red restringido devolvían
|
|
|
500 por falta de conexión; no se usaron como evidencia de corrección funcional.
|
|
|
El proveedor de pagos y el servidor Linux de producción no se han ensayado en vivo.
|
|
|
|
|
|
## Puesta en marcha y datos pendientes
|
|
|
|
|
|
1. Confirmar el intérprete de Dorina y los de Cupido sin flechas. Con esos datos,
|
|
|
asignar los créditos reales desde el panel. El auditor debe dejar de indicar
|
|
|
publicaciones sin intérprete.
|
|
|
2. Aplicar las migraciones 0024 y 0025 junto al despliegue. Son aditivas: no rellenan
|
|
|
datos ni eliminan tablas. La 0025 añade guardas que rechazan nuevas escrituras
|
|
|
incompatibles con una publicación completa.
|
|
|
3. Preparar `.env` y `.env.panel`, la misma base y rutas absolutas compartidas de
|
|
|
medios. Seguir [el procedimiento de despliegue](../despliegue/LEEME.md).
|
|
|
4. Comprobar con las cuentas reales de prueba la pasarela, la firma del webhook,
|
|
|
las unidades de servicio, TLS y la recuperación. Las pruebas del repositorio
|
|
|
no sustituyen este ensayo operativo.
|
|
|
|
|
|
## Capturas verificadas
|
|
|
|
|
|
Primera escucha en móvil, 375 × 667:
|
|
|
|
|
|

|
|
|
|
|
|
Modal horizontal, 812 × 375:
|
|
|
|
|
|

|