"""Typed exception hierarchy for any application built on mgf.common.

See: ``docs/reference/exceptions.md``.

The shape mirrors the standard documented in
``docs/standards/ERROR_HANDLING.md``:

  * ``AppError`` — base for every exception raised by application
    code. Subclass to define your project's own base if you want a
    nominal type ("MyAppError"); see vm-vmanager-app's ``vmanager.exceptions``
    module for the canonical pattern.
  * Eight category bases — ``ConfigError``, ``ProviderError``,
    ``OperationError``, ``GuestError``, ``HostEnvironmentError``,
    ``VaultError``, ``SchedulerError``, ``HttpError``. The first
    seven cover systems-management domain (the original
    reference-consumer shape); ``HttpError`` (added v0.18.0,
    closes FEEDBACK HTTP-01) covers web/API consumers whose
    natural exception taxonomy is HTTP-status-coded.
  * Four generic concretes — ``SchemaValidationError`` (carries
    ``.errors``), ``CommandError`` (carries
    ``.argv`` / ``.returncode`` / ``.stderr``),
    ``ResourceNotFoundError`` (carries ``.name``),
    ``ResourceAlreadyExistsError`` (carries ``.name``). These exist
    because they're useful on their own AND because consumers
    typically subclass them rather than re-implement the field
    plumbing.
  * HTTP concrete leaves (v0.18.0; renamed for PEP-8 N818 at v0.38.0) —
    ``HttpClientError`` (4xx base) and ``HttpServerError`` (5xx base),
    plus eight common-status leaves: ``HttpBadRequestError`` 400,
    ``HttpUnauthorizedError`` 401, ``HttpForbiddenError`` 403,
    ``HttpNotFoundError`` 404, ``HttpConflictError`` 409,
    ``HttpGoneError`` 410, ``HttpUnprocessableError`` 422,
    ``HttpInternalServerError`` 500, ``HttpServiceUnavailableError`` 503.
    Each carries ``http_status`` as a class attribute for framework
    integration.

**PEP-8 N818 rename (v0.38.0).** Twelve public exception names were
renamed at v0.38.0 to add the PEP-8 ``Error`` suffix
(``HttpBadRequest`` → ``HttpBadRequestError``, etc.). The pre-rename
aliases were kept as deprecated shims through the 0.x cycle and were
removed in the pre-v1.0 cleanup pass. Use the renamed names
directly.

Consumer projects subclass per their domain. See
``docs/standards/ERROR_HANDLING.md`` §2 for the full design rationale
and the drop-in template.
"""

from __future__ import annotations

from mgf.common.exceptions._base import AppError
from mgf.common.exceptions._well_known import (
    AppConfigError,
    AppConfigErrorKind,
    BootstrapError,
    CancellationError,
    CommandError,
    ConfigError,
    GuestCommandError,
    GuestError,
    GuestUnreachableError,
    HostEnvironmentError,
    HttpBadRequestError,
    HttpClientError,
    HttpConflictError,
    HttpError,
    HttpForbiddenError,
    HttpGoneError,
    HttpInternalServerError,
    HttpNotFoundError,
    HttpServerError,
    HttpServiceUnavailableError,
    HttpUnauthorizedError,
    HttpUnprocessableError,
    OperationError,
    ProcessError,
    ProcessNonZeroExitError,
    ProcessSignaledError,
    ProcessTimeoutError,
    ProviderError,
    ResourceAlreadyExistsError,
    ResourceNotFoundError,
    SchedulerError,
    SchemaValidationError,
    ServiceNotReadyError,
    VaultError,
)

__all__ = [
    "AppConfigError",
    "AppConfigErrorKind",
    "AppError",
    "BootstrapError",
    "CancellationError",
    "CommandError",
    "ConfigError",
    "GuestCommandError",
    "GuestError",
    "GuestUnreachableError",
    "HostEnvironmentError",
    "HttpBadRequestError",
    "HttpClientError",
    "HttpConflictError",
    "HttpError",
    "HttpForbiddenError",
    "HttpGoneError",
    "HttpInternalServerError",
    "HttpNotFoundError",
    "HttpServerError",
    "HttpServiceUnavailableError",
    "HttpUnauthorizedError",
    "HttpUnprocessableError",
    "OperationError",
    "ProcessError",
    "ProcessNonZeroExitError",
    "ProcessSignaledError",
    "ProcessTimeoutError",
    "ProviderError",
    "ResourceAlreadyExistsError",
    "ResourceNotFoundError",
    "SchedulerError",
    "SchemaValidationError",
    "ServiceNotReadyError",
    "VaultError",
]
