femind 0.2.0

Pluggable, feature-gated memory engine for AI agent applications
Documentation
[
  {
    "id": "current-architecture-decision",
    "title": "Current architecture wins over superseded planning",
    "category": "current-vs-superseded",
    "goal": "Prefer the active architecture decision over earlier drafts.",
    "records": [
      {
        "timestamp": "2026-03-10T09:00:00Z",
        "source": "meeting-note",
        "memory_type": "episodic",
        "text": "Initial thought: build the desktop shell before the memory engine so the UI can guide the API shape."
      },
      {
        "timestamp": "2026-03-12T15:30:00Z",
        "source": "decision-note",
        "memory_type": "semantic",
        "text": "Decision: build the memory engine first. Desktop work stays downstream until the core retrieval and extraction behavior is stable."
      },
      {
        "timestamp": "2026-03-13T10:00:00Z",
        "source": "planning-note",
        "memory_type": "semantic",
        "text": "The prior desktop-first idea is superseded. Current build order is femind first, then feloop."
      }
    ],
    "retrieval_checks": [
      {
        "query": "What should be built before desktop work?",
        "expected_answer": "The memory engine should be built first."
      },
      {
        "query": "Is desktop-first still the active plan?",
        "expected_answer": "No. That plan was superseded."
      }
    ]
  },
  {
    "id": "preference-change-over-time",
    "title": "Preference updates should replace stale preference answers",
    "category": "preferences-and-decisions",
    "goal": "Surface the current preference and retain change history.",
    "records": [
      {
        "timestamp": "2026-02-01T08:00:00Z",
        "source": "user-note",
        "memory_type": "semantic",
        "text": "For quick experiments, prefer local embeddings because they keep everything offline."
      },
      {
        "timestamp": "2026-03-20T08:00:00Z",
        "source": "user-note",
        "memory_type": "semantic",
        "text": "Update: for benchmark and evaluation workflows, prefer DeepInfra MiniLM embeddings because they are much faster and cheap enough."
      }
    ],
    "retrieval_checks": [
      {
        "query": "What embedding path is preferred for evaluation workflows?",
        "expected_answer": "DeepInfra MiniLM embeddings are preferred for evaluation workflows."
      },
      {
        "query": "What was the earlier preference before that update?",
        "expected_answer": "The earlier preference was local embeddings for quick offline experiments."
      }
    ]
  },
  {
    "id": "messy-meeting-extraction",
    "title": "Messy meeting notes should still produce usable extracted facts",
    "category": "messy-source-extraction",
    "goal": "Extract decisions, blockers, and follow-up items from rough notes.",
    "records": [
      {
        "timestamp": "2026-03-22T14:00:00Z",
        "source": "meeting-note",
        "memory_type": "episodic",
        "text": "Wed sync notes. ANN looked good after rebuild fix. Still need live provider test. Keep DeepInfra for embeddings, try gpt-oss-120b first for extraction. Don't do large benchmark runs yet. Need to confirm stale facts lose to current facts before calling this production."
      }
    ],
    "extraction_checks": [
      {
        "expected_fact": "ANN behavior improved after the rebuild fix."
      },
      {
        "expected_fact": "DeepInfra should be used for embeddings."
      },
      {
        "expected_fact": "gpt-oss-120b should be tried first for extraction."
      },
      {
        "expected_fact": "Large benchmark runs should not happen yet."
      }
    ],
    "retrieval_checks": [
      {
        "query": "What extraction model should be tried first?",
        "expected_answer": "gpt-oss-120b should be tried first."
      }
    ]
  },
  {
    "id": "temporal-current-state",
    "title": "Temporal questions should resolve to the current state",
    "category": "temporal-and-recency",
    "goal": "Answer current-state questions correctly when the same field changed over time.",
    "records": [
      {
        "timestamp": "2026-03-01T09:00:00Z",
        "source": "status-note",
        "memory_type": "semantic",
        "text": "The repo is still named mindcore and has not been moved into the suite yet."
      },
      {
        "timestamp": "2026-03-25T18:00:00Z",
        "source": "status-note",
        "memory_type": "semantic",
        "text": "The repo is now fe-mind and the crate name is femind."
      }
    ],
    "retrieval_checks": [
      {
        "query": "What is the current repo name?",
        "expected_answer": "The current repo name is fe-mind."
      },
      {
        "query": "What was the earlier repo name?",
        "expected_answer": "The earlier repo name was mindcore."
      }
    ]
  },
  {
    "id": "distractor-noise",
    "title": "Correct answer should survive similar distractor text",
    "category": "distractor-resistance",
    "goal": "Retrieve the right deployment detail even with similar noisy records nearby.",
    "records": [
      {
        "timestamp": "2026-03-15T11:00:00Z",
        "source": "ops-note",
        "memory_type": "procedural",
        "text": "DeepInfra API key auth was verified for femind validation."
      },
      {
        "timestamp": "2026-03-15T11:05:00Z",
        "source": "ops-note",
        "memory_type": "semantic",
        "text": "OpenRouter key remains available for unrelated experiments."
      },
      {
        "timestamp": "2026-03-15T11:10:00Z",
        "source": "ops-note",
        "memory_type": "procedural",
        "text": "Anthropic CLI auth is configured locally but should not be used for the first DeepInfra validation pass."
      }
    ],
    "retrieval_checks": [
      {
        "query": "Which provider auth was verified for the first femind validation pass?",
        "expected_answer": "DeepInfra auth was verified for the first femind validation pass."
      }
    ]
  },
  {
    "id": "abstention-missing-info",
    "title": "System should abstain when the answer is not present",
    "category": "abstention",
    "goal": "Avoid fabrication when the source records never contained the answer.",
    "records": [
      {
        "timestamp": "2026-03-18T12:00:00Z",
        "source": "project-note",
        "memory_type": "semantic",
        "text": "Need to compare extraction quality between gpt-oss-120b and Nemotron after the smoke test."
      },
      {
        "timestamp": "2026-03-18T12:05:00Z",
        "source": "project-note",
        "memory_type": "procedural",
        "text": "Do not run large benchmark sweeps before the practical eval set looks good."
      }
    ],
    "abstention_checks": [
      {
        "query": "What was the exact total token cost of the last Nemotron run?",
        "expected_behavior": "abstain"
      }
    ]
  }
]