remem-ai 0.6.79

Local-first coding agent memory for Claude Code and OpenAI Codex
Documentation
use anyhow::Result;
use rusqlite::Connection;

use super::{insert_observation, setup_dedup_schema, with_embedding_provider};
use crate::memory::dedup::{check_duplicate, find_hash_duplicates};

#[test]
fn cached_hash_query_rebinds_project() -> Result<()> {
    let conn = Connection::open_in_memory()?;
    setup_dedup_schema(&conn)?;

    let project_a = insert_observation(&conn, "project-a", "Project A exact observation")?;
    let project_b = insert_observation(&conn, "project-b", "Project B exact observation")?;
    let hash_a = crate::db::content_identity_hash("Project A exact observation".as_bytes());
    let hash_b = crate::db::content_identity_hash("Project B exact observation".as_bytes());

    assert_eq!(
        find_hash_duplicates(&conn, "project-a", &hash_a, 900)?,
        vec![project_a]
    );
    assert_eq!(
        find_hash_duplicates(&conn, "project-b", &hash_b, 900)?,
        vec![project_b]
    );
    Ok(())
}

#[test]
fn cached_vector_query_rebinds_project() -> Result<()> {
    with_embedding_provider("feature-hash", || -> Result<()> {
        let conn = Connection::open_in_memory()?;
        setup_dedup_schema(&conn)?;

        insert_observation(
            &conn,
            "project-a",
            "The release workflow rotates archived changelog entries.",
        )?;
        let unrelated = check_duplicate(
            &conn,
            "project-a",
            "Protect private secrets at rest with encryption.",
            None,
        )?;
        assert_eq!(unrelated, None);

        let expected = insert_observation(
            &conn,
            "project-b",
            "SQLCipher encrypts private secrets at rest.",
        )?;
        let duplicate = check_duplicate(
            &conn,
            "project-b",
            "Protect private secrets at rest with encryption.",
            None,
        )?;
        assert_eq!(duplicate, Some(expected));
        Ok(())
    })
}