Strict Choice with 2..255 alternatives and finite caller-key restoration.
Pair lists preserve order. Maps are sorted by wire key, not assumed to retain insertion order. :extra permits future fields except type/instructions/criteria.
:extra
@type t() :: %TypeSafeSDK.Question.Choice{ criteria: list(), extra: map(), instructions: term() }
@spec new(term(), map() | list(), keyword()) :: {:ok, t()} | {:error, TypeSafeSDK.Error.t()}
@spec new!(term(), map() | list(), keyword()) :: t()