huskies: merge 852

This commit is contained in:
dave
2026-04-29 08:51:22 +00:00
parent 549a9defc4
commit dcd695ad0e
3 changed files with 70 additions and 15 deletions
@@ -87,6 +87,47 @@ async fn stale_running_merge_job_is_cleared_and_retry_succeeds() {
);
}
// ── story 852: periodic background reaper ────────────────────────────────
/// AC2: a Running merge_job whose `server_start` is older than the current
/// server's boot time must be deleted by `reap_stale_merge_jobs` without any
/// merge attempt being triggered.
#[tokio::test]
async fn reap_stale_merge_jobs_removes_old_running_entry_without_merge() {
crate::crdt_state::init_for_test();
let pool = Arc::new(AgentPool::new_test(3001));
// Inject a Running entry whose server_start predates the current server.
crate::crdt_state::write_merge_job(
"852_stale_reaper",
"running",
1.0,
None,
Some(&super::time::encode_server_start_time(0.0)), // older boot → stale
);
assert!(
crate::crdt_state::read_merge_job("852_stale_reaper").is_some(),
"stale entry must exist before reap"
);
// Reap: must remove the entry without triggering a merge pipeline.
pool.reap_stale_merge_jobs();
assert!(
crate::crdt_state::read_merge_job("852_stale_reaper").is_none(),
"reap_stale_merge_jobs must delete the stale Running entry"
);
// No agents must have been spawned (no merge was triggered).
let agents = pool.agents.lock().unwrap();
assert!(
agents.is_empty(),
"reap must not spawn any agents; got {} agent(s)",
agents.len()
);
}
// ── story 719: stale-lock recovery on new merge attempts ─────────────────
/// AC1/AC2/AC3: seeding merge_jobs with an entry whose PID is dead, then