Every fallible operation in the crate reports through TixError,
and the Result alias is the canonical return type used across the
module boundaries. Consumers match on the variants rather than on
ad-hoc strings; context strings carry human-readable detail.