core/packs/ethics/__init__.py
Shay dab7b9c061 feat(adr-0033): ethics packs — third pack-layer sibling to identity + safety
Completes the three-layer pack architecture:
  identity (who CORE is)  + safety (universal red lines)
                          + ethics (deployment-specific propositional commitments)

  manifold.boundary_ids = identity.boundary_ids
                        ∪ safety.boundary_ids
                        ∪ ethics.commitment_ids

Ethics packs are swappable like identity (fall back to default on load
failure) but propositional like safety (commitment ids union into the
manifold).  EthicsPackError inherits from ValueError; only when both
the requested and default packs fail does startup refuse.

Ships default_general_ethics_v1 with five commitments:
  - acknowledge_uncertainty
  - defer_high_stakes_to_human_review
  - disclose_limitations
  - no_manipulation
  - respect_user_autonomy

Ratified through identity_anchor template at SHA 81fc9b61c828….

Test coverage: 20 new tests; combined identity/safety/ethics surface
suite is 81 tests, all green.  Cognition (121), teaching (17), runtime
(19), smoke (67), and cognition eval all unaffected.
2026-05-17 20:41:04 -07:00

26 lines
675 B
Python

"""Ethics packs — ADR-0033.
Domain-specific ethical commitments composed into the runtime manifold
alongside identity (swappable) and safety (always-loaded). Ethics
packs are swappable like identity packs but contribute *commitments*
(propositional pledges) rather than *value axes* (geometric directions)
or *boundaries* (universal red lines).
See ``docs/decisions/ADR-0033-ethics-packs.md``.
"""
from packs.ethics.loader import (
DEFAULT_ETHICS_PACK,
EthicsPack,
EthicsPackError,
available_packs,
load_ethics_pack,
)
__all__ = [
"DEFAULT_ETHICS_PACK",
"EthicsPack",
"EthicsPackError",
"available_packs",
"load_ethics_pack",
]