pub const EXTRACTION_SYSTEM_PROMPT: &str = include_str!("prompts/extraction.md");
pub const COMPACTION_SYSTEM_PROMPT: &str = include_str!("prompts/compaction.md");
pub fn get_extraction_system_prompt() -> &'static str {
EXTRACTION_SYSTEM_PROMPT
}
pub fn get_compaction_system_prompt() -> &'static str {
COMPACTION_SYSTEM_PROMPT
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn extraction_prompt_is_nonempty() {
assert!(!EXTRACTION_SYSTEM_PROMPT.is_empty());
assert!(EXTRACTION_SYSTEM_PROMPT.len() > 1000, "extraction prompt suspiciously short");
}
#[test]
fn compaction_prompt_is_nonempty() {
assert!(!COMPACTION_SYSTEM_PROMPT.is_empty());
assert!(COMPACTION_SYSTEM_PROMPT.len() > 1000, "compaction prompt suspiciously short");
}
#[test]
fn extraction_prompt_stable_across_calls() {
let a = get_extraction_system_prompt();
let b = get_extraction_system_prompt();
assert_eq!(a, b);
assert_eq!(a.as_ptr(), b.as_ptr(), "prompt should be a single static buffer");
}
#[test]
fn compaction_prompt_stable_across_calls() {
let a = get_compaction_system_prompt();
let b = get_compaction_system_prompt();
assert_eq!(a, b);
assert_eq!(a.as_ptr(), b.as_ptr());
}
#[test]
fn extraction_prompt_mentions_v1_types() {
for t in &["claim", "preference", "directive", "commitment", "episode", "summary"] {
assert!(
EXTRACTION_SYSTEM_PROMPT.contains(t),
"extraction prompt missing v1 type {:?}",
t
);
}
}
#[test]
fn extraction_prompt_has_merged_topic_shape() {
assert!(EXTRACTION_SYSTEM_PROMPT.contains("PHASE 1"));
assert!(EXTRACTION_SYSTEM_PROMPT.contains("PHASE 2"));
assert!(EXTRACTION_SYSTEM_PROMPT.contains("\"topics\""));
assert!(EXTRACTION_SYSTEM_PROMPT.contains("\"facts\""));
}
#[test]
fn extraction_prompt_includes_rule_6_meta_filter() {
assert!(
EXTRACTION_SYSTEM_PROMPT.contains("META-request")
|| EXTRACTION_SYSTEM_PROMPT.contains("META-requests"),
"extraction prompt missing Rule 6 meta-filter language"
);
assert!(EXTRACTION_SYSTEM_PROMPT.contains("TotalReclaw"));
}
#[test]
fn compaction_prompt_admits_importance_5() {
assert!(
COMPACTION_SYSTEM_PROMPT.contains("5+")
|| COMPACTION_SYSTEM_PROMPT.contains("5 "),
"compaction prompt must mention importance floor 5"
);
}
#[test]
fn compaction_prompt_includes_rule_6_meta_filter() {
assert!(
COMPACTION_SYSTEM_PROMPT.contains("META-request")
|| COMPACTION_SYSTEM_PROMPT.contains("META-requests"),
"compaction prompt missing Rule 6 meta-filter language"
);
assert!(COMPACTION_SYSTEM_PROMPT.contains("TotalReclaw"));
}
#[test]
fn prompts_are_distinct() {
assert_ne!(EXTRACTION_SYSTEM_PROMPT, COMPACTION_SYSTEM_PROMPT);
assert!(COMPACTION_SYSTEM_PROMPT.contains("LAST CHANCE"));
assert!(COMPACTION_SYSTEM_PROMPT.contains("FORMAT-AGNOSTIC"));
}
}