```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:
    if isinstance(start, bool) or not isinstance(start, int):
        raise ValueError("every argument must be an integer")
    if isinstance(end, bool) or not isinstance(end, int):
        raise ValueError("every argument must be an integer")
    if isinstance(span, bool) or not isinstance(span, int):
        raise ValueError("every argument must be an integer")
    if isinstance(rest, bool) or not isinstance(rest, int):
        raise ValueError("every argument must be an integer")
    if isinstance(least, bool) or not isinstance(least, 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 = []
    current_from = start

    while current_from < end:
        remaining_length = end - current_from
        if remaining_length >= least:
            next_to = min(current_from + span, end)
            stretches.append((current_from, next_to))
            current_from = next_to + rest
        else:
            break

    return stretches
```