```python
import re


def parse_option(segment: str) -> list:
    key, eq, raw = segment.partition("=")
    if not eq or re.fullmatch(r"[A-Za-z][A-Za-z0-9_]*", key) is None:
        raise ValueError("malformed option segment: " + segment)
    if len(raw) >= 2 and raw.startswith('"') and raw.endswith('"'):
        raw = raw[1:-1]
    return [key, raw]


def scan_pairs(text: str) -> list:
    if not isinstance(text, str) or text == "":
        raise ValueError("input must be a non-empty string")

    pairs = []
    key_set = set()
    i = 0
    while i < len(text):
        start = i
        while i < len(text) and text[i] != ';':
            i += 1
        segment = text[start:i].strip()

        if segment.startswith('"'):
            j = i
            while j < len(text) and text[j] != '"':
                j += 1
            if j == len(text):
                raise ValueError("unterminated quote")
            segment = text[start:j+1].strip('"')
            i = j + 1

        parsed = parse_option(segment)
        key, value = parsed
        if key in key_set:
            raise ValueError(f"repeated key: {key}")
        key_set.add(key)
        pairs.append(parsed)

        if i < len(text):
            i += 1

    return pairs
```