huskies: merge 862

This commit is contained in:
dave
2026-04-29 13:24:10 +00:00
parent 69930fb29f
commit b4854cf693
9 changed files with 190 additions and 6 deletions
@@ -54,6 +54,17 @@ pub fn write_merge_job(
.into();
apply_and_persist(&mut state, |s| s.crdt.doc.merge_jobs.insert(ROOT_ID, entry));
state.merge_job_index = rebuild_merge_job_index(&state.crdt);
// After inserting a new entry via JSON, explicitly set the error field via
// .set() so that entry.error.view() returns the correct value immediately.
// The JSON insert path initialises LWW fields, but an explicit .set() is
// required for the stale-merge reaper to read the field reliably via .view().
if let Some(e) = error
&& let Some(&idx) = state.merge_job_index.get(story_id)
{
apply_and_persist(&mut state, |s| {
s.crdt.doc.merge_jobs[idx].error.set(e.to_string())
});
}
}
}
+25
View File
@@ -183,6 +183,31 @@ fn merge_job_insert_update_delete() {
assert!(read_merge_job("100").is_none());
}
#[test]
fn merge_job_error_field_readable_after_insert() {
// Regression: the error field must be readable via read_all_merge_jobs()
// immediately after a fresh insert so that the stale-merge reaper can
// decode server_start_time from it (None → treated as legacy/stale).
init_for_test();
write_merge_job(
"test_error_field",
"running",
1.0,
None,
Some("{\"server_start\":9999999.0}"),
);
let all = read_all_merge_jobs().unwrap_or_default();
let entry = all
.iter()
.find(|v| v.story_id == "test_error_field")
.expect("entry must exist in read_all");
assert_eq!(
entry.error.as_deref(),
Some("{\"server_start\":9999999.0}"),
"error field must be readable via view() after a fresh insert"
);
}
#[test]
fn active_agent_insert_update_delete() {
init_for_test();