Audit of the one-mutation-path invariant (ADR-0021 §3) found three leaks
where pack authority or session-state writes could substitute for coherence
judgment. All three landed fixes or partial closures in this push.
Leaks closed:
- Leak A: pack vocab defaulted to COHERENT — flipped to SPECULATIVE in
language_packs/{compiler,schema}.py; docstring corrected to align with
ADR-0021 (it was rationalizing the leak).
- Leak B: vault.recall was epistemic-blind — VaultStore.store() now stamps
every entry with EpistemicStatus (default SPECULATIVE); recall(min_status=)
filters to admissible-as-evidence tier. All 4 vault-write sites updated.
- Leak C (write-side): generate/proposition.py:198 stored articulated
propositions unmarked — now stamps SPECULATIVE, breaking the
fabrication-feedback loop in principle. Read-side audit of 5 call sites
is the residual.
New architectural invariants (tests/test_architectural_invariants.py):
- INV-21: one-mutation-path allowlist (caught Leak C on first run)
- INV-22: pack lexicon default is SPECULATIVE (Leak A guard)
- INV-23: vault recall epistemic-aware (Leak B guard)
New eval lanes:
- teaching_injection_resistance — ships GREEN at 1.00/1.00/0 (the
structural anti-injection claim is real and measurable)
- refusal_calibration — honest gap: 0% refusal, 0% fabrication
- contradiction_detection — honest gap: 50% flag via versor-delta heuristic,
100% false-positive; motivates the proper coherence-checker
- articulation_of_status — honest gap: 0% speculative articulation, 60%
false certainty; output-side leak surface
New benchmarks:
- benchmarks/footprint.py — total deployed runtime is 7.06 MiB
(109,358x smaller than Llama 3.1 405B, runs offline, no GPU)
- benchmarks/learning_curve.py — monotonic + replay-deterministic curve
per lane
Documentation:
- docs/truth_seeking_schema.md — foundational architectural commitment,
five rules, mapped to human failure modes, leaks published openly
- evals/CLAIMS.md — five-tier public claims doc; Tier 4.5 publishes
known gaps with named fixes; verification contract at top
- README.md — new pillar between algebraic substrate and language pillar
Includes in-flight formation pipeline scaffolding (formation/, tests/formation/,
docs/formation_pipeline_plan.md) and minor CLI/contracts/gitignore edits
that were already in the working tree at session start.
Verification: 798 passed, 2 skipped, 1 deselected (pre-existing pack-count
test drift unrelated to schema changes).
3 KiB
contradiction-detection eval lane
What it measures
When CORE is taught two corrections that directly contradict each
other (e.g. "truth is coherence" then "truth is not coherence"),
the second event should be flagged as conflicting with the first —
either via a coherence judgment that transitions one or both to
EpistemicStatus.CONTESTED, or via a versor-condition spike that
makes the conflict structurally visible.
Why it matters (structural win, eventually)
Frontier LLMs absorb contradictory training data silently. A fine-tuning corpus that says "X is Y" in one shard and "X is not Y" in another produces a model whose answer depends on sampling, not on which claim is correct. There is no mechanism to surface the disagreement to a reviewer.
CORE's stored-relation substrate and exact CGA recall make
contradiction a detectable event in principle: two triples
(truth, IS, coherence) and (truth, IS_NOT, coherence) in the
same teaching store are inconsistent on inspection, and a coherence
judgment can transition the conflicting pair to CONTESTED before
they pollute downstream inference.
Current state — honest
The detection mechanism is not implemented at v1.
The teaching review path today admits both members of a contradictory
pair at EpistemicStatus.SPECULATIVE. There is no coherence judgment
that compares newly-admitted triples against existing store contents,
and no automatic CONTESTED transition on conflict. The pipeline does
not raise the versor-condition signal on the second teaching event.
This lane exists now so the gap is visible and tracked. It will not pass until one of the following is built:
- A coherence checker invoked at
TeachingStore.addthat detects(S, R, O)↔(S, R_negated, O)pairs and transitions both to CONTESTED. - A geometric contradiction signal derived from versor-condition delta when conflicting teachings are applied.
ADR-0021 reserves CONTESTED and FALSIFIED precisely for this; the
machinery to enter those states is not yet wired.
Pass criteria
| Metric | Definition | v1 threshold | Honest current expectation |
|---|---|---|---|
contradiction_flag_rate |
Fraction of paired-contradiction cases where the second event surfaces a CONTESTED transition or versor spike | 0.90 | 0.00 |
false_flag_rate |
Fraction of paired-consistent cases that are incorrectly flagged as contradictory | 0.00 | 0.00 (no flagger exists) |
overall_pass |
flag_rate ≥ 0.90 AND false_flag_rate == 0 | true | false at v1 |
Cases
Each case is a pair of corrections delivered sequentially against
the same prior. The lane runner applies them in order and inspects
the second event's pack_mutation_proposal.epistemic_status and the
versor-condition delta between the two events.
- Paired contradiction — corrections that negate each other.
- Paired consistent — control pairs that elaborate without contradicting, to keep the flagger honest if/when one is built.
Runner
runner.py in this directory.