Implements the 4-phase documentation reorganization master plan. - Consolidation: Merged brief/, handoff/, planning/, and decisions/ into briefs/, handoffs/, plans/, and adr/ respectively (101 ADRs relocated) - Root Cleanup: Relocated HANDOFF-gpt55-*.md and key top-level docs (runtime_contracts.md, etc.) to canonical folders. Added superseded alerts. - Indices & Navigation: Created docs/README.md navigation document, docs/sessions/README.md index, docs/adr/README.md index - Note: Also includes prior commit adding ADR-0200+ corpus hygiene governance (ADR-0225, dependency map, backfilled cross-references)
100 lines
3.9 KiB
Markdown
100 lines
3.9 KiB
Markdown
# ADR-0044 — Medical / clinical ethics pack (worked-example domain pack)
|
||
|
||
Status: Accepted (2026-05-17)
|
||
|
||
## Context
|
||
|
||
ADR-0033 shipped the third pack-layer sibling (`packs/ethics/`) with
|
||
exactly one ratified pack: `default_general_ethics_v1`. Through
|
||
ADR-0034 → ADR-0042, the per-commitment remediation tiers (audit /
|
||
hedge / refuse) and the full audit + telemetry stack landed. The
|
||
shape of the system is complete; the worked example is missing.
|
||
|
||
Robotics, healthcare, legal, and financial deployments are the
|
||
audience the pack-layer architecture exists to serve. Until at least
|
||
one domain pack ratifies end-to-end through the formation pipeline,
|
||
the deployment story is "you could do this" rather than "here is what
|
||
that looks like."
|
||
|
||
## Decision
|
||
|
||
Ship `packs/ethics/medical_clinical_ethics_v1.json` as the worked
|
||
example. Six commitments, partitioned across the three remediation
|
||
tiers:
|
||
|
||
| Commitment | Tier |
|
||
|---|---|
|
||
| `no_dosing_recommendation` | refuse |
|
||
| `no_emergency_triage_authority` | refuse |
|
||
| `defer_diagnosis_to_clinician` | hedge |
|
||
| `surface_evidence_grade` | hedge |
|
||
| `disclose_no_clinician_relationship` | audit |
|
||
| `respect_patient_autonomy` | audit |
|
||
|
||
The pack is ratified through `scripts/ratify_ethics_pack.py` (which
|
||
now drives both packs). A companion `medical_clinical_ethics_v1.mastery_report.json`
|
||
self-seal lands next to it. Production-mode loading verifies the
|
||
seal; dev override remains `CORE_ALLOW_UNRATIFIED_ETHICS=1`.
|
||
|
||
`tests/test_medical_clinical_ethics_pack.py` (8 tests) gates the
|
||
load-bearing claims:
|
||
|
||
1. The pack file + mastery report exist on disk and the sha is set.
|
||
2. `load_ethics_pack("medical_clinical_ethics_v1")` succeeds (sealed
|
||
report verifies).
|
||
3. The six commitments are present, with refusal/hedge lists disjoint
|
||
and subset of the commitment set.
|
||
4. `ChatRuntime(config=RuntimeConfig(ethics_pack="medical_clinical_ethics_v1"))`
|
||
composes the manifold with the safety floor *plus* every medical
|
||
commitment.
|
||
5. The default general pack does *not* carry the medical floor — pack
|
||
swap is visible and load-bearing.
|
||
|
||
## Consequences
|
||
|
||
**Positive.**
|
||
|
||
- Deployers now have a worked example to fork. The path is:
|
||
author JSON → `scripts/ratify_ethics_pack.py` → drop into config.
|
||
- The medical pack exercises all three remediation tiers; downstream
|
||
packs can mix-and-match without architectural friction.
|
||
- The composition test (`safety ∪ ethics ⊆ manifold`) lifts from
|
||
abstract to concrete: every safety boundary plus every medical
|
||
commitment appears in `identity_manifold.boundary_ids`.
|
||
|
||
**Trade-offs.**
|
||
|
||
- The pack ships with general clinical-deployment commitments; it is
|
||
*not* a substitute for a clinician-reviewed deployment policy. The
|
||
pack's description states this plainly.
|
||
- Six commitments is a starter set, not a comprehensive medical-ethics
|
||
taxonomy. Adding commitments later requires re-ratification (the
|
||
script is idempotent).
|
||
- The `domain` field is constrained to the registry in
|
||
`packs/ethics/loader.py` (`general`, `medical`, `legal`, `financial`,
|
||
`robotics`, `custom`). Adding a new domain string requires
|
||
extending the loader's `_validate_domain` allowlist.
|
||
|
||
## How to verify
|
||
|
||
```bash
|
||
PYTHONPATH=. python3 scripts/ratify_ethics_pack.py
|
||
PYTHONPATH=. python3 -m pytest tests/test_medical_clinical_ethics_pack.py -q
|
||
```
|
||
|
||
## Where it lives
|
||
|
||
- `packs/ethics/medical_clinical_ethics_v1.json`
|
||
- `packs/ethics/medical_clinical_ethics_v1.mastery_report.json`
|
||
- `scripts/ratify_ethics_pack.py` (PACK_IDS extended)
|
||
- `tests/test_medical_clinical_ethics_pack.py`
|
||
|
||
## Related
|
||
|
||
- [ADR-0033](ADR-0033-ethics-pack.md) — ethics pack architecture.
|
||
- [ADR-0037](ADR-0037-per-predicate-ethics-refusal.md) — per-commitment
|
||
refusal opt-in (used by `refusal_commitments`).
|
||
- [ADR-0038](ADR-0038-hedge-injection.md) — hedge injection (used by
|
||
`hedge_commitments`).
|
||
- [ADR-0043](ADR-0043-pack-measurements-phase2.md) — pack measurements
|
||
(the medical pack auto-extends future pack-aware runs).
|