Skip to content

feat(memory): evidence-backed claims and a relationship graph #178

Open

Description

@Ambisphaeric

Problem

Entities and sightings exist, but the system lacks a durable representation for learned facts such as a person working on a project, a repository belonging to an application, or a document being related to an earlier author. Similarity retrieval alone cannot safely represent truth or corrections.

Scope

Add an append-only claim model and relationship projection grounded in evidence.

Acceptance criteria

  • A claim records subject, predicate, value/object, workspace/app scope, valid time, confidence, state, evidence refs, creator, and supersession/correction refs.
  • Claims support provisional, confirmed, corrected, rejected, and superseded states.
  • User corrections outrank inferred claims without deleting the original inference or evidence.
  • Relationships among people, projects, repositories, pull requests, documents, and organizations are queryable.
  • Repeated evidence may strengthen a claim through a recorded derivation; it does not silently mutate confidence.
  • Lexical, temporal, vector, and graph indexes are rebuildable projections rather than truth stores.
  • Similarity results always return the supporting claims/evidence and scope.
  • Cross-workspace retrieval is denied unless the active AppInstance has an explicit memory grant.
  • Fixture: separate screen and audio observations link a repository, pull request, teammate, and project with inspectable evidence.

Non-goals

  • Treating embeddings as facts.
  • Automatic external actions.
  • Learning sensitive relationships without visible provenance and correction controls.

Dependencies and related work

Depends on ContextPackets and #116. Builds on entity contracts #72-#75 and the currently reserved graph store.

Activity

  1. Ambisphaeric commented on Jul 17, 2026

    @Ambisphaeric
    OwnerAuthor

    Slice 1 (substrate) landed via PR #239, merged 62cc1f4 (CI green). #178 stays OPEN.

    Fresh-eyes verified end-to-end pre-merge (scratch worktree at head d73acb0, base ab4ece1):

    • Evidence-mandatory is unrepresentable-otherwise — Claim.evidence is minItems:1 at the contract (generated Claim.json carries it + required), the store re-validates on saveClaim, and a test pins rejection of an evidence-less claim + content-smuggling + a closed evidence-source set.
    • Sovereignty proven on all three attack paths (resolveClaimHeads, keyed by the corrected pair): a user REJECT survives (a) re-derivation with MORE evidence and (b) a supersession revision; (c) corrections are append-only and derived can never clobber user state; originals retained under includeSuperseded. The critical reject-survives-re-derivation test is explicit.
    • Determinism — two fresh isolated stores yield full-JSON.stringify byte-identical claims; the content-id hash excludes the clock (idempotent even under a 2099 clock); evidence/pairs/participants all sorted (store read order cannot change output).
    • Model-free builder — imports only node:crypto + contract types; hardcodes co-occurs-with (the semantic kinds and the relates-to fallback are typed but never emitted by slice 1).
    • Depth-1 walk resolves supersession/sovereignty before walking and always returns the backing claimIds; the served routes (/claims, /claims/related, /claims/build, /claims/correct) are driven end-to-end through the real auth boundary.

    Later slices (still OPEN):

    Minor test-coverage gap noted (not a blocker): there is no walk-specific "reject a pair then walk" test — the property is covered transitively (the walk consumes listClaims → resolveClaimHeads, which drops rejected pairs). Worth a dedicated test in a later slice.

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

    enhancementNew feature or requestmvpOn the MVP launch critical path

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions