```python
"""Work stretches of a shift: span-long, rest-separated, short tails dropped."""


def carve_shift(start: int, end: int, span: int, rest: int, least: int) -> list:
    """Carve a shift into work stretches separated by rests, dropping short tails."""
    for value in (start, end, span, rest, least):
        if isinstance(value, bool) or not isinstance(value, int):
            raise ValueError("every argument must be an integer")
    if start >= end:
        raise ValueError("shift start must precede its end")
    if span < 1 or rest < 1:
        raise ValueError("span and rest must be at least 1")
    if least < 1 or least > span:
        raise ValueError("least must be between 1 and span")

    stretches: list[tuple[int, int]] = []
    current = start

    while current < end:
        # Calculate the length of the potential stretch
        stretch_length = min(span, end - current)
        
        # If the stretch is shorter than 'least', drop it and stop carving
        if stretch_length < least:
            break
            
        # Add the stretch
        stretches.append((current, current + stretch_length))
        
        # Move forward by the stretch length plus the rest
        current += stretch_length + rest

    return stretches
```