13 KiB
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. 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
- 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.
- 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.
- Preparar
.envy.env.panel, la misma base y rutas absolutas compartidas de medios. Seguir el procedimiento de despliegue. - 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:

