voice: auto no longer refuses to synthesize

Status: scheduled.

Sending voice auto to the OpenAI-compatible speech route answered 503 no_candidate in every language, while an empty voice, an omitted voice and a preset voice all returned audio. Auto now means what it means for model: the router chooses.

POST /v1/audio/speech with voice auto returned 503 no_candidate for every language, including languages with more than a dozen routable synthesis models. The native synthesis route was never affected.

Auto was read as the name of a specific voice. That marks the request as having pinned a voice, which narrows the candidate list to vendors offering that exact voice, and no vendor offers one called auto, so the list emptied and routing reported that nothing matched.

Auto and speko/auto are now read the same way an absent voice is read, matching how model already treats them. A real voice still pins, so a caller who names one is still honoured.

Action: No migration is required. Callers who worked around this by sending an empty voice can keep doing so; both spellings behave identically.