<think>
Okay, I need to implement the lay_conveyor function according to the given task. Let me start by understanding the problem.

The function takes a floor plan, which is a list of rows. Each row is a string of '.' and '#' characters. The conveyor is laid straight eastward, starting at [row, col] and covering 'length' cells. Each cell in the run must be '.', and the run must not go beyond the last column. If any of these conditions are violated, a ValueError is raised. The function should return a new list of rows with the specified run replaced, without modifying the original floor.

First, I need to check if the row is valid. The row must be between 0 and len(floor)-1. If not, raise an error. Then, check the column. The starting column plus length-1 must be less than the length of the row. Because each row is equally long. So, if the row is valid, but the starting column is such that col + length exceeds the row's length, that's invalid.

Also, each cell in the run must be '.', otherwise, raise an error. So, for the row, check that from col to col + length -1, all are '.'.

Once these checks are done, create a new list of rows. The row in question is modified to have '=' in the specified positions. The rest of the rows remain the same.

Wait, the problem says that the run is length cells. So, if the length is 0, that's a problem. But the task says that a run covering no cells is not meaningful. So, the function should check that length is at least 1. Because if length is 0, then the run is zero cells, which is invalid. So, in the code, we need to check if length is less than 1, and raise ValueError.

So, the steps are:

1. Check if row is valid (0 <= row < len(floor)).
2. Check if length is at least 1.
3. Check if col + length <= len(floor[row]). Because the row is of length len(floor[0]), assuming all rows are same length.
4. Check that all cells from col to col + length -1 in the row are '.'.
5. If all these are true, then create a new row where those cells are replaced with '='.
6. Return a new list of rows, with the specified row modified.

Now, let's think about the code.

The function is given floor, row, col, length.

First, check if row is valid. If not, raise ValueError.

Then check if length is less than 1. If so, raise ValueError.

Then check if col + length exceeds the row's length. For example, if the row has length N, then col + length must be <= N. Because the run is length cells, starting at col. So, the last cell is at col + length -1. So, col + length -1 < len(row). So, col + length <= len(row).

Wait, len(row) is the number of columns. So, for example, if the row is "....", length is 4, col is 0. Then 0 + 4 = 4, which is equal to len(row) (4). So that's okay. But if col is 3 and length is 2, then 3 + 2 = 5, which is longer than len(row) (4). So that's invalid.

So, the check is: col + length <= len(row[0]).

Wait, but floor is a list of rows. Each row is a string. So, len(floor[0]) is the number of columns.