```python
def run_reservoir(capacity: int, start: int, ticks: list) -> dict:
    if not isinstance(capacity, int) or capacity <= 0:
        raise ValueError("Capacity must be a positive integer.")
    if not isinstance(start, int) or start < 0 or start > capacity:
        raise ValueError("Starting level must be an integer between 0 and capacity.")
    if not all(isinstance(tick, tuple) and len(tick) == 2 and all(isinstance(x, int) and x >= 0) for tick in ticks):
        raise ValueError("Ticks must be two-item tuples of non-negative integers.")

    level = start
    spilled = 0
    shortfall = 0
    served = 0

    for inflow, demand in ticks:
        if level + inflow > capacity:
            spilled += level + inflow - capacity
            level = capacity
        else:
            level += inflow
        if level >= demand:
            level -= demand
            served += demand
        else:
            shortfall += level
            served += level

    return {'level': level, 'spilled': spilled, 'shortfall': shortfall, 'served': served}
```