```python
def lay_conveyor(floor: list, row: int, col: int, length: int) -> list:
    if row < 0 or row >= len(floor):
        raise ValueError("Row out of bounds")
    if col < 0 or col + length > len(floor[row]):
        raise ValueError("Run passes the last column")
    if any(cell != '.' for cell in floor[row][col:col + length]):
        raise ValueError("Run covers a cell that is not open")

    new_floor = floor[:]
    new_floor[row] = ''.join(['=' if i >= col and i < col + length else cell for i, cell in enumerate(floor[row])])
    return new_floor
```