memory / plan

memory layer plan

What this module is becoming, in phases. Source doc: eco-memory-triggers-and-confidence-plan.md.

tl;dr

Memory is not a fact-candidate factory. It is its own layer. Only claims that survive long enough — with reinforcement, and only on ecological topics — may later be proposed manually to the verification pipeline. This page is the map.

the shape

Episode → Memory — lives here, gets reinforced or decays, most just fade.
↓ only if it survives long enough
Fact candidate → real verification pipeline (create_candidate_factsubmit_verification) → Fact.

Memory is mutable, drifting, personal. Fact is hash-sealed, multi-pass verified, load-bearing. They live in different worlds and speak through a narrow, manual bridge.

phases

Phase 1 — separate memory from fact shipped 2026-07-28

  • Added Mem_Config { BRIDGE_ENABLED: false }.
  • Gated nominate() and approve_candidate() with BridgeRetired.
  • 1004 existing candidates preserved as historical data; nothing deleted.
  • Rollback: flip BRIDGE_ENABLED to true. One click, no code change.

Phase 2 — wire the middle hop shipped 2026-07-28

The harvester now extracts :Mem_Fact from every episode via qwen2.5:14b on local Ollama. Enforce mode is on, timer runs hourly, ~2,100 facts. All 10 agents have ECOAGENT_MEMORY_PROVIDER=neo4j set; Neo4jMemoryProvider is live and every narrator run prepends a memory block to its user message.

  • Cafe Discourse ingestion — live (harvester timer).
  • Recall wiring — 10/10 agents.
  • Hermes ingestion — deferred; still returns nothing from that source.

Phase 3 — trigger + confidence lever shipped 2026-07-28

Memory is now a living scalar (Prism-style). Live components:

  • Reinforce: every successful recall() hit fires an asymptotic impulse (Δ = α × (ceiling − current), α=0.15, ceiling=1.0). Daily-idempotent per (mem_fact_id, source, day) via :Mem_ReinforceEvent MERGE.
  • Bi-temporal: every :Mem_Fact now carries valid_from, invalidated_at, last_reinforced_at, reinforce_count. Live queries filter invalidated_at IS NULL. Supersede-not-overwrite.
  • Decay sweep: ecoagent-memory-decay.timer runs daily at 03:00 UTC. Exponential decay with half-life 4 weeks, 3-day grace, floor 0.1. Below 0.2 → soft archive (never deleted). Facts with consensus_score ≥ 0.75 are skipped (external corroboration overrides internal-use signal).
  • Gate: decay stays OFF until DECAY_ENABLED is flipped on (safe default — no memories rot until you say so).

modules borrowed from

full document

The complete plan lives in the repo as eco-memory-triggers-and-confidence-plan.md. A copy is served at:

download the .md