Watch selected folders and reconcile bounded changes with media freshness guards
This commit is contained in:
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(())
|
||||
}
|
||||
|
||||
|
||||
Reference in new issue
Block a user