Replaces the hardcoded IdentityManifold constructor in chat/runtime.py
with a content-addressed pack loader. Identity is now load-bearing AND
swappable: deployments select an identity pack at startup, downstream
builders (robotics, personalization, creative tools) author their own
ratified packs without editing CORE Python.
Phase 1 — pack format + loader
* packs/identity/loader.py — load_identity_manifold(pack_id, *,
search_paths, require_ratified) with bounds checks (axis count,
direction in [-1, 1], weight in [0, 10], threshold in [0, 1],
axis-id uniqueness).
* available_packs() helper for discovery.
* IdentityPackError raised on every bounds violation.
Phase 2 — three v1 packs
* default_general_v1.json — ship default; encodes the previous
hardcoded three axes (truthfulness, coherence, reverence)
byte-for-byte so existing runtime behavior is preserved.
* precision_first_v1.json — boosts truthfulness weight, narrows
coherence/reverence; tighter alignment threshold.
* generosity_first_v1.json — boosts coherence weight, broadens
reverence; looser alignment threshold.
Phase 3 — replace hardcoded constructor
* chat/runtime.py:206 calls load_identity_manifold() using
RuntimeConfig.identity_pack (default DEFAULT_IDENTITY_PACK).
* Dead _default_identity_manifold() removed.
* ChatRuntime.identity_pack_id surfaces the loaded pack id.
Phase 4 — CLI flag
* core chat --identity <pack_id> (also threaded into trace/oov via
_add_runtime_policy_args).
* core/config.py: RuntimeConfig.identity_pack added; empty string
falls back to DEFAULT_IDENTITY_PACK = 'default_general_v1'.
Phase 5 — formation ratification — INTENTIONALLY DEFERRED. Loader
currently calls require_ratified=False so the v1 packs (which carry
empty mastery_report_sha256) load. Authoring SubjectSpecs for each
pack, running the formation pipeline end-to-end to produce signed
MasteryReports, and embedding the SHA into each pack file is a
follow-up.
Tests: 18 new tests in tests/test_identity_packs.py covering loader
happy paths, every bounds violation, runtime wiring, and pack-swap
divergence.
Suite status: cognition 121, teaching 17, runtime 19, formation 182,
smoke 67 — all green.
Docs: ADR-0027 (Accepted) + docs/identity_packs.md (operational ref) +
README.md §Identity Packs + docs/teaching_order.md Layer 1 cross-ref.
35 lines
1 KiB
JSON
35 lines
1 KiB
JSON
{
|
|
"pack_id": "default_general_v1",
|
|
"version": "1.0.0",
|
|
"description": "Balanced general identity. Shipping default. Encodes the three axes previously hardcoded in chat/runtime.py: truthfulness, coherence, reverence.",
|
|
"schema_version": "1.0.0",
|
|
"mastery_report_sha256": "",
|
|
"alignment_threshold": 0.45,
|
|
"boundary_ids": [
|
|
"no_fabricated_source",
|
|
"no_hot_path_repair"
|
|
],
|
|
"value_axes": [
|
|
{
|
|
"axis_id": "truthfulness",
|
|
"name": "truthfulness",
|
|
"direction": [1.0, 0.0, 0.0],
|
|
"weight": 1.0,
|
|
"theological_note": "Truth is treated as a fixed value axis, not a prompt preference."
|
|
},
|
|
{
|
|
"axis_id": "coherence",
|
|
"name": "coherence",
|
|
"direction": [0.0, 1.0, 0.0],
|
|
"weight": 1.0,
|
|
"theological_note": "Operations must preserve field coherence under propagation."
|
|
},
|
|
{
|
|
"axis_id": "reverence",
|
|
"name": "reverence",
|
|
"direction": [0.0, 0.0, 1.0],
|
|
"weight": 1.0,
|
|
"theological_note": "Depth-language handling remains bounded by source structure."
|
|
}
|
|
]
|
|
}
|