from __future__ import annotations class DomainError(Exception): """A domain rejection with a stable API error payload.""" def __init__(self, code: str, message: str, *, refs: list | None = None, recovery: str = "none", status: int = 422): super().__init__(message) self.code, self.message, self.status = code, message, status self.refs, self.recovery = refs or [], recovery def payload(self) -> dict: return {"code": self.code, "message": self.message, "retryable": self.recovery == "retry_same_request", "related_refs": self.refs, "recovery_action": self.recovery, "retry_after_seconds": None} def require(condition: bool, code: str, message: str, **kwargs) -> None: if not condition: raise DomainError(code, message, **kwargs)