Skip to content

observe(check_conflict) adjudicates against low-similarity neighbours and penalises unrelated memories #82

Description

@idapixl

What happened

Two observe() calls on the same store, same session (engine 1.5.0, NLI via nli-http):

  1. Text about the Aug–Sep 2026 gap being caused by subscription cost. Nearest memory "Figure out what autonomous Idapixl can actually do", max_similarity 0.72. Adjudicated genuine at 0.92. Correct — the older memory assumed autonomy was the limiting factor.
  2. Text describing the Ricochet Mine game's rule model (Three.js, on -> if -> do JSON rules). Nearest memory "Animation stack decision for fozikio ecosystem: Framer Motion", max_similarity 0.51. Adjudicated genuine at 0.87, and that memory's confidence was penalised by 0.13.

The second pair does not contradict; the texts are simply about different things. An NLI cross-encoder asked "does A contradict B" about two unrelated statements will often say contradiction, because they are not entailed and not neutral in its training distribution.

Where

src/tools/observe.ts:84:

if (checkConflict && ctx.nli && gate.nearest_id && gate.decision !== 'novel') {

Adjudication runs for every non-novel observation. The only similarity floor is whatever makes the gate decision link rather than novel, which admits neighbours at ~0.5.

Why it matters

The penalty is applied to a memory that had nothing to do with the observation. Over time, ordinary fact-recording erodes the confidence of whatever happens to be the nearest unrelated concept. This is the same shape as the dream salience-inflation bug (#37): a maintenance path quietly rewriting a signal the rest of the system trusts.

Proposed fix

Add a similarity floor for adjudication, separate from the link threshold — e.g. conflict_min_similarity defaulting to the namespace's similarity_merge (or 0.65), and skip adjudication below it with adjudication: { skipped: 'low_similarity' } in the result so callers can see it was considered. Optionally require the NLI neutral score to be below a bound before accepting contradiction.

Repro

Any store with an NLI provider: observe a statement about topic X where the nearest memory (≈0.5) is about unrelated topic Y. Expect no penalty; observe a genuine verdict.

Found during Idapixl's 2026-09-13 audit session.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions