remem-ai 0.3.8

Persistent memory for Claude Code — single binary, zero subprocesses
Documentation
use crate::summarize::parse_summary;

#[test]
fn parse_summary_extracts_fields() {
    let xml = r#"
<summary>
<request>Fix search</request>
<completed>Improved ranking</completed>
<decisions>Use trigram tokenizer</decisions>
<learned>FTS5 handles CJK</learned>
<next_steps>Add benchmarks</next_steps>
<preferences>Prefer concise output</preferences>
</summary>
"#;
    let parsed = parse_summary(xml).expect("summary should parse");
    assert_eq!(parsed.request.as_deref(), Some("Fix search"));
    assert_eq!(parsed.completed.as_deref(), Some("Improved ranking"));
    assert_eq!(parsed.decisions.as_deref(), Some("Use trigram tokenizer"));
    assert_eq!(parsed.learned.as_deref(), Some("FTS5 handles CJK"));
    assert_eq!(parsed.next_steps.as_deref(), Some("Add benchmarks"));
    assert_eq!(parsed.preferences.as_deref(), Some("Prefer concise output"));
}

#[test]
fn parse_summary_returns_none_for_skip_marker() {
    assert!(parse_summary("<skip_summary />").is_none());
}