✓ las URLs se detectan en subcarpeta ✓ base_path configura una subcarpeta explícita ✓ el catálogo vacío funciona ✓ la tabla de eventos existe en SQLite ✓ productos conserva los campos públicos ✓ el producto activo aparece una sola vez ✓ el catálogo usa el stock real por lotes ✓ el catálogo usa el precio único del ERP ✓ el slug propio se conserva al editar ✓ los slugs duplicados se resuelven ✓ el evento no guarda datos personales ✓ el total se guarda en centavos ✓ la migración del catálogo es idempotente Prueba de catálogo completada correctamente.