Watch selected folders and reconcile bounded changes with media freshness guards

This commit is contained in:
karl committed 2026-10-13 02:30:38 +02:00
1 parent 99748bd99f
commit 657de3de86
22 files changed
+2022 -149

No files matched your search

@@ -321,14 +321,39 @@ fn genuine_google_mixed_media_reuse_checks_bytes_despite_identical_file_metadata
.open(&image)?
.set_times(fs::FileTimes::new().set_modified(metadata.modified()?))?;
assert_eq!(fs::metadata(&image)?.modified()?, metadata.modified()?);
// Core intentionally sees unchanged size/mtime: semantic reuse must still
// hash actual media bytes before accepting a completion manifest.
// Full metadata reconciliation intentionally retains its media fast path.
// A native event must durably invalidate old media even with identical stats.
lexical.index_folder(&root)?;
let canonical_root = fs::canonicalize(&root)?;
let image_hint = fs::canonicalize(&image)?;
lexical.index_paths_with_options(
&canonical_root,
std::slice::from_ref(&image_hint),
&Default::default(),
)?;
assert!(HybridSearch::embedding_status(&db)?.stale);
let options = SearchOptions {
extension: Some("bmp".into()),
..Default::default()
};
assert!(
service.search("a red square", 10, &options)?.is_empty(),
"The hinted old image must be hidden until actual byte-verified reindexing"
);
service.index_embeddings_with_media(&tools, &limits)?;
let changed = calls.lock().unwrap().clone();
assert_eq!(changed.documents, initial.documents);
assert_eq!(changed.audio, initial.audio);
assert_eq!(changed.images, initial.images + 1);
assert!(!HybridSearch::embedding_status(&db)?.stale);
let response = service.search("a green square", 10, &options)?;
assert_eq!(response[0].filename, "color.bmp");
let connection = Connection::open(&db)?;
let revisions: (i64,i64) = connection.query_row(
"SELECT f.change_revision,c.file_change_revision FROM files f JOIN semantic_chunks c ON c.path=f.path WHERE f.path=?1 AND c.generation=(SELECT active_generation FROM semantic_meta WHERE singleton=1)",
[image_hint.to_string_lossy().as_ref()], |row| Ok((row.get(0)?,row.get(1)?)),
)?;
assert_eq!(revisions, (1, 1));
let latest = chunks(&db)?;
for chunk in first.iter().filter(|chunk| !chunk.0.ends_with("color.bmp")) {
assert!(
@@ -348,6 +373,27 @@ fn genuine_google_mixed_media_reuse_checks_bytes_despite_identical_file_metadata
.unwrap()
.6
);
// Unchanged bytes still need fresh eligibility after a hint, but the SHA-
// verified completed source should reuse vectors and remap revision tokens.
let audio_hint = fs::canonicalize(root.join("tone.wav"))?;
lexical.index_paths_with_options(
&canonical_root,
&[image_hint.clone(), audio_hint.clone()],
&Default::default(),
)?;
assert!(service.search("a green square", 10, &options)?.is_empty());
let reused = service.index_embeddings_with_media(&tools, &limits)?;
assert_eq!(reused.reused_sources, 5);
assert_eq!(*calls.lock().unwrap(), changed);
assert_eq!(
service.search("a green square", 10, &options)?[0].filename,
"color.bmp"
);
let audio_revisions: (i64,i64) = connection.query_row(
"SELECT f.change_revision,c.file_change_revision FROM files f JOIN semantic_chunks c ON c.path=f.path WHERE f.path=?1 AND c.generation=(SELECT active_generation FROM semantic_meta WHERE singleton=1)",
[audio_hint.to_string_lossy().as_ref()], |row| Ok((row.get(0)?,row.get(1)?)),
)?;
assert_eq!(audio_revisions, (1, 1));
Ok(())
}