"""Safety-pack loader.

Reads the single shipping safety pack and returns its boundary set for
composition into the runtime ``IdentityManifold``.  Safety packs are
**not** swappable: there is exactly one safety pack per installation,
loaded unconditionally.

The loader fails closed.  Missing file, malformed JSON, empty
``boundary_ids``, or — in production mode — unverified self-seal all
cause ``SafetyPackError`` and prevent ``ChatRuntime`` startup.

See ``docs/decisions/ADR-0029-safety-packs.md``.
"""

from packs.safety.check import (
    SafetyCheck,
    SafetyCheckResult,
    SafetyContext,
    SafetyPredicate,
    SafetyVerdict,
)
from packs.safety.loader import (
    DEFAULT_SAFETY_PACK,
    SafetyPack,
    SafetyPackError,
    load_safety_pack,
)

__all__ = [
    "DEFAULT_SAFETY_PACK",
    "SafetyCheck",
    "SafetyCheckResult",
    "SafetyContext",
    "SafetyPack",
    "SafetyPackError",
    "SafetyPredicate",
    "SafetyVerdict",
    "load_safety_pack",
]
