chore: keep real names out of code and tests

The daily-summary cleaner hard-coded two contacts' names in its opening
phrases; a pattern now strips "Today, <Name> and I discussed" for any
contact (with a test). Video path tests use a neutral folder name.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Cameron CordesandClaude Opus 5.5 committed 2026-10-30 15:06:21 -04:00
1 parent b7ad2dae16
commit ccead2d7c0
2 files changed
+44 -16

No files matched your search

+35 -7
View File
@@ -1,8 +1,9 @@
use anyhow::Result;
use chrono::{NaiveDate, Utc};
use opentelemetry::trace::Status;
use regex::Regex;
use std::collections::HashMap;
use std::sync::{Arc, Mutex};
use std::sync::{Arc, LazyLock, Mutex};
use tokio::time::sleep;
use tracing_opentelemetry::OpenTelemetrySpanExt;
@@ -112,14 +113,20 @@ pub fn strip_summary_boilerplate(summary: &str) -> String {
}
}
// "Today, <contact> and I discussed …" for any contact name (one or two
// capitalised words), so no names are baked into the code.
static NAMED_OPENING: LazyLock<Regex> = LazyLock::new(|| {
Regex::new(
r"^(?:[Tt]oday,?\s+)?\p{Lu}[\p{L}'’-]*(?:\s+\p{Lu}[\p{L}'’-]*)?\s+and\s+I\s+discussed",
)
.expect("valid regex")
});
if let Some(m) = NAMED_OPENING.find(&text) {
text = text[m.end()..].trim_start().to_string();
}
// Remove common opening phrases that add no semantic value
let opening_phrases = [
"Today, Melissa and I discussed",
"Today, Amanda and I discussed",
"Today Melissa and I discussed",
"Today Amanda and I discussed",
"Melissa and I discussed",
"Amanda and I discussed",
"Today, I discussed",
"Today I discussed",
"The conversation covered",
@@ -376,3 +383,24 @@ async fn generate_and_store_daily_summary(
result?;
Ok(())
}
#[cfg(test)]
mod tests {
use super::strip_summary_boilerplate;
#[test]
fn strips_a_named_opening_for_any_contact() {
for raw in [
"Today, Sam and I discussed the trip.",
"Today Sam Lee and I discussed the trip.",
"Jordan and I discussed the trip.",
] {
assert_eq!(strip_summary_boilerplate(raw), "the trip.", "{raw}");
}
assert_eq!(
strip_summary_boilerplate("The weather and I discussed nothing"),
"The weather and I discussed nothing",
"a lowercase second word isn't a name"
);
}
}