```python
def backoff_schedule(base: int, factor: int, cap: int, attempts: int) -> list:
    if not (isinstance(base, int) and base > 0):
        raise ValueError("Base must be a whole number of one or more")
    if not (isinstance(factor, int) and factor > 0):
        raise ValueError("Factor must be a whole number of one or more")
    if not (isinstance(cap, int) and cap >= base):
        raise ValueError("Cap must be a whole number or equal to base")
    if not (isinstance(attempts, int) and attempts > 0):
        raise ValueError("Attempts must be a whole number of one or more")
    if isinstance(base, bool) or isinstance(factor, bool) or isinstance(cap, bool) or isinstance(attempts, bool):
        raise ValueError("None of the parameters can be a boolean")

    moments = [0]
    current_idle = base
    for _ in range(1, attempts):
        next_idle = min(current_idle * factor, cap)
        moments.append(moments[-1] + next_idle)
        current_idle = next_idle
    return moments
```