```python
def driest_window(rain: list, width: int) -> int:
    """
    Find the starting index of the width-day stretch with the smallest sum of rainfall readings.
    If multiple stretches have the same smallest sum, return the earliest start index.
    """
    if not isinstance(rain, list) or not all(isinstance(x, int) for x in rain):
        raise ValueError("rain must be a list of non-negative integers.")
    if not isinstance(width, int) or width <= 0:
        raise ValueError("width must be a positive whole number.")
    if width > len(rain):
        raise ValueError("width cannot be larger than the number of days.")
    
    min_sum = float('inf')
    min_index = 0
    
    for i in range(len(rain) - width + 1):
        current_sum = sum(rain[i:i+width])
        if current_sum < min_sum:
            min_sum = current_sum
            min_index = i
    
    return min_index
```