use super::*;
fn stamp_on_disk(state: &AppState, palace: &str) -> Option<u64> {
let id = trusty_common::memory_core::PalaceId::new(palace);
let data_dir = state.registry.peek(&id)?.data_dir.clone()?;
crate::palace_last_used::read(&data_dir)
}
#[tokio::test]
async fn dispatch_remember_and_recall_stamp_last_used() {
let (state, _tmp) = test_state();
dispatch_tool(&state, "palace_create", json!({"name": "stamped"}))
.await
.expect("palace_create");
assert_eq!(
stamp_on_disk(&state, "stamped"),
None,
"creating a palace is not using it"
);
dispatch_tool(
&state,
"memory_remember",
json!({"palace": "stamped", "text": "The stamp file is written whenever a caller performs a real write against this palace", "room": "General"}),
)
.await
.expect("memory_remember");
let after_write = stamp_on_disk(&state, "stamped").expect("remember must stamp");
state.palace_last_used.clear();
dispatch_tool(
&state,
"memory_recall",
json!({"palace": "stamped", "query": "stamp", "top_k": 3}),
)
.await
.expect("memory_recall");
let after_read = stamp_on_disk(&state, "stamped").expect("recall must stamp");
assert!(
after_read >= after_write,
"a recall is use too: {after_read} must not predate {after_write}"
);
}
#[tokio::test]
async fn an_alias_addressed_recall_stamps_the_canonical_palace() {
let (state, _tmp) = test_state();
dispatch_tool(
&state,
"palace_create",
json!({"name": "stamped-canonical"}),
)
.await
.expect("palace_create");
let canonical = dispatch_tool(
&state,
"palace_info",
json!({"palace": "stamped-canonical"}),
)
.await
.expect("palace_info")["id"]
.as_str()
.expect("id")
.to_string();
trusty_common::palace_alias::PalaceAliasStore::register_alias(
&state.data_root,
"sc",
&canonical,
)
.expect("register_alias");
dispatch_tool(
&state,
"memory_recall",
json!({"palace": "sc", "query": "anything", "top_k": 3}),
)
.await
.expect("memory_recall through the alias");
assert!(
stamp_on_disk(&state, &canonical).is_some(),
"an alias-addressed recall must stamp the canonical palace it actually opened"
);
}
#[tokio::test]
async fn dispatch_palace_info_does_not_stamp_last_used() {
let (state, _tmp) = test_state();
dispatch_tool(&state, "palace_create", json!({"name": "looked-at"}))
.await
.expect("palace_create");
let info = dispatch_tool(&state, "palace_info", json!({"palace": "looked-at"}))
.await
.expect("palace_info");
assert!(
info["last_used_unix"].is_null(),
"a never-used palace reports null, not a date: {info}"
);
assert_eq!(
stamp_on_disk(&state, "looked-at"),
None,
"palace_info must not stamp the palace it reports on"
);
}
#[tokio::test]
async fn last_used_is_reported_by_palace_info_and_console_metrics() {
let (state, _tmp) = test_state();
dispatch_tool(&state, "palace_create", json!({"name": "reported"}))
.await
.expect("palace_create");
dispatch_tool(
&state,
"memory_remember",
json!({"palace": "reported", "text": "A fact long enough to be worth storing, so the write path actually runs and stamps", "room": "General"}),
)
.await
.expect("memory_remember");
let on_disk = stamp_on_disk(&state, "reported").expect("stamped");
let info = dispatch_tool(&state, "palace_info", json!({"palace": "reported"}))
.await
.expect("palace_info");
assert_eq!(info["last_used_unix"].as_u64(), Some(on_disk));
let palace_id = info["id"].as_str().expect("palace_info reports an id");
let report = dispatch_tool(&state, "console_metrics", json!({}))
.await
.expect("console_metrics");
let entry = report["metrics"]["palaces"]
.as_array()
.expect("palaces array")
.iter()
.find(|p| p["id"].as_str() == Some(palace_id))
.expect("the palace must appear in the report");
assert_eq!(
entry["last_used_unix"].as_u64(),
Some(on_disk),
"console_metrics must report the same stamp palace_info does: {entry}"
);
}