```python
"""Tape-measure spans: parse to inches, format canonically, and add."""

INCHES = {"yd": 36, "ft": 12, "in": 1}
ORDER = ("yd", "ft", "in")


def parse_span(text: str) -> int:
    if not isinstance(text, str) or not text.strip():
        raise ValueError("span must be a non-empty string")
    
    parts = text.split()
    unit_seen = set()
    total = 0
    
    for part in parts:
        value, unit = part[:-2], part[-2:]
        if not value.isdigit() or (value.startswith('0') and value != '0'):
            raise ValueError("value must be a plain decimal integer with no leading zero")
        if unit not in INCHES or unit in unit_seen:
            raise ValueError(f"unknown, repeated, or out-of-order unit: {unit}")
        total += int(value) * INCHES[unit]
        unit_seen.add(unit)
    
    return total


def format_span(inches: int) -> str:
    if not isinstance(inches, int) or inches < 0:
        raise ValueError("inches must be a non-negative integer")
    
    if inches == 0:
        return "0in"
    
    parts = []
    yards, rest = divmod(inches, 36)
    feet, rest = divmod(rest, 12)
    inches = rest
    
    if yards:
        parts.append(f"{yards}yd")
    if feet:
        parts.append(f"{feet}ft")
    if inches:
        parts.append(f"{inches}in")
    
    return " ".join(parts)


def add_spans(first: str, second: str) -> str:
    return format_span(parse_span(first) + parse_span(second))
```