```python


"""The cheapest set of travel passes covering every trip day."""


def _validate_plan(trip_days: list, passes: list) -> None:
    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.get("span", 0)
        cost = cover.get("cost", -1)
        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")


def cheapest_pass_plan(trip_days: list, passes: list) -> dict:
    _validate_plan(trip_days, passes)
    
    # Sort trip days for efficient processing
    trip_days.sort()
    
    # Initialize variables to track the best plan and its total cost
    best_cost = float('inf')
    best_purchases = []
    
    # Iterate over all possible combinations of pass covers
    for i in range(len(passes)):
        cover = passes[i]
        start_day = trip_days[0]  # Start with the earliest trip day
        current_cost = 0
        days_covered = set()
        
        while start_day in trip_days and len(days_covered) < len(trip_days):
            if start_day not in days_covered:
                days_covered.add(start_day)
                current_cost += cover["cost"]
            
            # Move to the next day covered by this pass
            for _ in range(cover["span"] - 1):
                start_day += 1
                if start_day > trip_days[-1]:
                    break
        
        # If a better plan is found, update the best cost and purchases
        if current_cost < best_cost:
            best_cost = current_cost
            best_purchases = [cover["start_day"], cover["span"]]
    
    return {
        "total": best_cost,
        "purchases": best_purchases
    }
```