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)
3.9 KiB
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:
- The pack file + mastery report exist on disk and the sha is set.
load_ethics_pack("medical_clinical_ethics_v1")succeeds (sealed report verifies).- The six commitments are present, with refusal/hedge lists disjoint and subset of the commitment set.
ChatRuntime(config=RuntimeConfig(ethics_pack="medical_clinical_ethics_v1"))composes the manifold with the safety floor plus every medical commitment.- 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 inidentity_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
domainfield is constrained to the registry inpacks/ethics/loader.py(general,medical,legal,financial,robotics,custom). Adding a new domain string requires extending the loader's_validate_domainallowlist.
How to verify
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.jsonpacks/ethics/medical_clinical_ethics_v1.mastery_report.jsonscripts/ratify_ethics_pack.py(PACK_IDS extended)tests/test_medical_clinical_ethics_pack.py