core/evals/identity_divergence/contract.md

4.1 KiB

identity-divergence eval lane

What it measures

Whether CORE's identity system produces meaningfully different articulations when presented with different identity profiles, and whether each articulation remains internally coherent with its respective profile.

This tests the architectural claim that identity is load-bearing: different identity axes should produce different, principled behaviors, not random noise.

Identity axis sets

Two deliberately opposed axis sets produce different stances on the same proposition:

Axis Set Orientation Example preference
A (Precision) Accuracy-first, explicit qualification, technical precision "Light might reveal some aspects of truth" (hedged)
B (Generosity) Inclusivity-first, broader generalization, relational emphasis "Light reveals truth" (direct claim)

Axis A: Precision-first identity

  • Weight accuracy over coverage
  • Prefer qualified claims and caveats
  • Emphasize technical distinctions
  • Flag uncertainty explicitly
  • Avoid overstatement

Axis B: Generosity-first identity

  • Weight inclusivity over precision
  • Prefer direct, affirmative claims
  • Emphasize unity and connection
  • Implicit confidence
  • Embrace broader interpretation

Shared curriculum

Curated set of ~100 teaching events, identical for both agents:

  • Articulation prompts (proposition graphs to realize)
  • Domain instruction (kinship, color, spatial relations)
  • Logical reasoning (transitivity, hierarchy)
  • Uncertainty handling (contradiction, ambiguity)

Scoring rubric

Divergence metric

Measured on articulation outputs:

  • Syntactic divergence: different surface forms for same graph
  • Modal divergence: modal strength (must/might/should)
  • Hedge divergence: presence/absence of qualifiers (maybe, arguably, perhaps)
  • Polarity divergence: confirmation vs. hedging

Divergence score = fraction of articulations where axis A vs. B produce measurably different outputs (lexically, syntactically, or modally).

Pass threshold: Divergence > 0.30 (at least 30% of outputs differ)

Coherence metric

For each identity profile, measured per articulation:

  • Consistency within profile: does the output respect its own axis preferences?
  • Contradiction check: outputs should not contradict known teaching
  • Modal alignment: should express appropriate uncertainty for the domain

Coherence score = fraction of articulations that remain consistent with their identity profile (no hedges for Axis B, no overstatements for Axis A).

Pass threshold: Coherence > 0.85 (85%+ consistency)

Identity-stripped baseline

Same curriculum with identity disabled (neutral profile):

  • Should produce consistent "default" articulations
  • Divergence with stripped baseline should be near zero
  • Proves identity is the causal factor, not noise

Pass threshold: Divergence(A vs. stripped) > Divergence(baseline A vs. B) (i.e., axis A differs more from baseline than the baseline differs from itself)

Pass thresholds (v1)

  • Divergence: > 0.30 (meaningful difference)
  • Coherence (Axis A): > 0.85
  • Coherence (Axis B): > 0.85
  • Coherence (stripped): > 0.85
  • Causal check: divergence_A_vs_baseline > divergence_baseline_A_vs_baseline
  • Overall: all thresholds must be met

Evaluation protocol

  1. Load identity profiles (A, B, stripped neutral)
  2. Load shared curriculum teaching examples
  3. For each articulation prompt:
    • Run with Axis A identity → realize surface
    • Run with Axis B identity → realize surface
    • Run with stripped identity → realize surface
  4. Score divergence and coherence
  5. Report per-axis and aggregate metrics

Data layout

evals/identity_divergence/
  contract.md           # this file
  axes/
    axis_a.yaml         # precision-first profile
    axis_b.yaml         # generosity-first profile
  curriculum/
    teaching.jsonl      # ~100 teaching events
  dev/
    cases.jsonl         # dev set
  public/
    v1/
      cases.jsonl       # public test set
  holdouts/
    v1/
      cases.jsonl       # sealed holdout
  runner.py             # scorer (divergence + coherence)
  results/              # output reports