```python
from typing import List, Dict

def cheapest_pass_plan(trip_days: List[int], passes: List[Dict[str, int]]) -> dict:
    _validate_plan(trip_days, passes)
    
    n = len(trip_days)
    dp = [float('inf')] * (n + 1)
    dp[0] = 0
    prev_purchase_indices = [-1] * (n + 1)
    
    for i in range(1, n + 1):
        for pass_ in passes:
            span = pass_["span"]
            cost = pass_["cost"]
            if i - span >= 0 and dp[i - span] + cost < dp[i]:
                dp[i] = dp[i - span] + cost
                prev_purchase_indices[i] = i - span
    
    purchases = []
    while n > 0:
        start_day = prev_purchase_indices[n]
        span = trip_days[start_day + pass_["span"] - 1] - trip_days[start_day] + 1
        purchases.append([trip_days[start_day], span])
        n = start_day
    
    return {
        "total": dp[-1],
        "purchases": purchases[::-1]
    }

def _validate_plan(trip_days: List[int], passes: List[Dict[str, int]]):
    for day in trip_days:
        if isinstance(day, bool) or not isinstance(day, int) or day < 1:
            raise ValueError("trip days must be positive integers")
    for earlier, later in zip(trip_days, trip_days[1:]):
        if later <= earlier:
            raise ValueError("trip days must be strictly increasing")
    if not passes:
        raise ValueError("at least one pass kind is required")
    for cover in passes:
        span = cover["span"]
        cost = cover["cost"]
        if isinstance(span, bool) or not isinstance(span, int) or span < 1:
            raise ValueError("pass span must be a positive integer")
        if isinstance(cost, bool) or not isinstance(cost, int) or cost < 0:
            raise ValueError("pass cost must be a non-negative integer")
```