```python
def ring_slot(capacity: int, writes: int, k: int) -> int:
    """Return the slot index holding the k-th oldest survivor in a ring buffer."""
    if not isinstance(capacity, int) or isinstance(capacity, bool) or capacity <= 0:
        raise ValueError("capacity must be a positive integer")
    if not isinstance(writes, int) or isinstance(writes, bool) or writes < 0:
        raise ValueError("writes must be a non-negative integer")
    if not isinstance(k, int) or isinstance(k, bool) or k < 0:
        raise ValueError("k must be a non-negative integer")

    survivors = min(writes, capacity)
    if k >= survivors:
        raise ValueError("k is out of range for the number of survivors")

    # The survivors are the newest 'survivors' readings.
    # If writes >= capacity, the survivors are readings [writes - capacity, writes - 1].
    # If writes < capacity, the survivors are readings [0, writes - 1].
    # The oldest survivor is the first one in this range.
    # The k-th oldest survivor is the (k)-th element in this range.
    
    # Start index of the survivors in the reading sequence
    start_reading = max(0, writes - capacity)
    
    # The reading number for the k-th oldest survivor
    reading_number = start_reading + k
    
    # The slot index is reading_number mod capacity
    return reading_number % capacity
```