Closes the 'identity is load-bearing but not visibly differentiated'
gap noted at the end of ADR-0027. Pack swap now produces visibly
different surfaces on identical trajectories at the same alignment.
Schema bump — packs gain an optional 'surface_preferences' block:
hedge_threshold_strong, hedge_threshold_soft → band entries
preferred_hedge_strong, preferred_hedge_soft → phrases per band
claim_strength → balanced|qualified|affirmative
qualified_band_high, preferred_qualifier → marginal-band shaping
Loader enforces threshold ordering (strong <= soft <= qual_high),
phrase length bounds, and the enum-of-three for claim_strength.
Missing block resolves to defaults that reproduce pre-ADR behavior
byte-for-byte; existing tests pass unchanged.
Algorithm (deterministic, surface-only, no sampling/repair/normalize):
alignment < strong → preferred_hedge_strong + lower-cased surface
alignment < soft → preferred_hedge_soft + lower-cased surface
soft <= alignment < qual_high
and claim_strength=qualified → preferred_qualifier + lower-cased surface
otherwise → bare surface
Three v1 pack profiles:
default_general_v1 balanced; 0.40 / 0.50 / 0.75 ; 'It seems that' / 'Perhaps'
precision_first_v1 qualified; 0.55 / 0.70 / 0.85 ; 'Arguably,' / 'In some cases,' / 'Under certain conditions,'
generosity_first_v1 affirmative; 0.20 / 0.30 / 0.50 ; default hedge phrases
Re-ratified. New MasteryReport SHAs (superseding Phase-5):
default_general_v1 → ddc1ba127231272660e6a435e177227558461b0278572a95635b416c3e1dec5a
precision_first_v1 → cb5fb2323214a26afda33f2a67e22f38fe49f4763829d48ef67fd41241aba33c
generosity_first_v1 → 94f2f49e1b16c7498fb52b8f9864eecc198618933dc8381a01b809c146826db7
Files touched:
* core/physics/identity.py — new SurfacePreferences dataclass;
IdentityManifold gains 'surface_preferences' field with defaults.
* packs/identity/loader.py — _build_surface_preferences() parses,
bounds-checks (threshold ordering, claim_strength enum, phrase
length, threshold ranges); SurfacePreferences round-trips.
* generate/surface.py — SurfaceContext gains 7 new fields with defaults
matching the pre-ADR module-level HEDGE_STRONG_THRESHOLD /
HEDGE_SOFT_THRESHOLD; _apply_hedge takes the full context and
implements the four-band algorithm; module-level constants retained
for back-compat.
* chat/runtime.py — _build_surface_context lifts manifold.surface_preferences
into SurfaceContext.
* packs/identity/*.json — three v1 packs gain surface_preferences blocks
tuned to their roles; re-ratified via scripts/ratify_identity_packs.py
(idempotent).
* tests/test_identity_surface_divergence.py — 15 tests covering hedge
bands, claim_strength bands, pack-swap divergence proof, and runtime
context wiring.
Suite status: cognition 121, teaching 17, runtime 19, formation 182,
smoke 67 — all green. test_identity_packs.py 23/23, new
test_identity_surface_divergence.py 15/15.
Docs: ADR-0028 (Accepted) records the decision and verification; ADR-0027
status updated to point to ADR-0028 for deep realizer wiring; README
§Identity Packs notes the visible divergence; docs/identity_packs.md
gains a §Surface preferences section and closes the known-limit #1
about invisible surface differentiation.
57 lines
1.6 KiB
JSON
57 lines
1.6 KiB
JSON
{
|
|
"pack_id": "precision_first_v1",
|
|
"version": "1.0.0",
|
|
"description": "Precision-first specialization. Boosts truthfulness; narrows coherence and reverence. Source: evals/identity_divergence/axes/axis_a.yaml (semantics, not field-for-field).",
|
|
"schema_version": "1.0.0",
|
|
"mastery_report_sha256": "cb5fb2323214a26afda33f2a67e22f38fe49f4763829d48ef67fd41241aba33c",
|
|
"alignment_threshold": 0.55,
|
|
"boundary_ids": [
|
|
"no_fabricated_source",
|
|
"no_hot_path_repair",
|
|
"no_overstatement"
|
|
],
|
|
"surface_preferences": {
|
|
"hedge_threshold_strong": 0.55,
|
|
"hedge_threshold_soft": 0.7,
|
|
"preferred_hedge_strong": "Arguably,",
|
|
"preferred_hedge_soft": "In some cases,",
|
|
"claim_strength": "qualified",
|
|
"qualified_band_high": 0.85,
|
|
"preferred_qualifier": "Under certain conditions,"
|
|
},
|
|
"value_axes": [
|
|
{
|
|
"axis_id": "truthfulness",
|
|
"name": "truthfulness",
|
|
"direction": [
|
|
1.0,
|
|
0.0,
|
|
0.0
|
|
],
|
|
"weight": 2.0,
|
|
"theological_note": "Precision-first: accuracy weighs higher than coverage. Explicit qualification preferred."
|
|
},
|
|
{
|
|
"axis_id": "coherence",
|
|
"name": "coherence",
|
|
"direction": [
|
|
0.0,
|
|
0.7,
|
|
0.0
|
|
],
|
|
"weight": 0.7,
|
|
"theological_note": "Coherence is necessary but secondary to precision when the two are in tension."
|
|
},
|
|
{
|
|
"axis_id": "reverence",
|
|
"name": "reverence",
|
|
"direction": [
|
|
0.0,
|
|
0.0,
|
|
0.7
|
|
],
|
|
"weight": 0.7,
|
|
"theological_note": "Reverence narrowed to source-text fidelity; broad inclusivity is not preferred."
|
|
}
|
|
]
|
|
}
|