remem-ai 0.6.93

Local-first coding agent memory for Claude Code and OpenAI Codex
Documentation
use anyhow::{bail, Result};

#[derive(Debug, Clone, Default)]
pub(super) struct BackupAcknowledgement {
    pub(super) pattern_id: Option<String>,
    pub(super) pattern_version: Option<i64>,
    pub(super) acknowledged_at_epoch: Option<i64>,
}

impl BackupAcknowledgement {
    pub(super) fn validate_metadata(&self) -> Result<bool> {
        match (
            &self.pattern_id,
            self.pattern_version,
            self.acknowledged_at_epoch,
        ) {
            (None, None, None) => Ok(false),
            (Some(pattern_id), Some(version), Some(acknowledged_at_epoch))
                if !pattern_id.trim().is_empty() && version > 0 && acknowledged_at_epoch > 0 =>
            {
                Ok(true)
            }
            _ => bail!("backup import acknowledgement metadata is incomplete"),
        }
    }

    pub(super) fn validate_for_payload(&self, title: &str, content: &str) -> Result<bool> {
        let present = self.validate_metadata()?;
        let matched =
            crate::memory::poisoning::scan_instruction_pattern(&format!("{title}\n{content}"));
        match (matched, present) {
            (Some(matched), true)
                if self.pattern_id.as_deref() == Some(matched.pattern_id)
                    && self.pattern_version == Some(matched.pattern_set_version) =>
            {
                Ok(true)
            }
            (Some(matched), true) => bail!(
                "backup import acknowledgement does not match instruction-pattern {}@{}",
                matched.pattern_id,
                matched.pattern_set_version
            ),
            (Some(matched), false) => bail!(
                "backup import payload matched instruction-pattern {}@{}",
                matched.pattern_id,
                matched.pattern_set_version
            ),
            (None, true) => Ok(true),
            (None, false) => Ok(false),
        }
    }
}