"""Project-wide exception classes."""


class ResearchTerminatedException(BaseException):
    """Raised when a user cancels an in-progress research process.

    Inherits from BaseException (not Exception) so that ``except Exception``
    blocks throughout the strategy code naturally let it propagate -- the same
    pattern Python's stdlib uses for asyncio.CancelledError (since 3.9),
    KeyboardInterrupt, and SystemExit.
    """

    pass
