huskies: merge 1008

This commit is contained in:
dave
2026-05-14 08:41:49 +00:00
parent 761b6934f1
commit ebf58ef224
9 changed files with 170 additions and 2 deletions
+28 -2
View File
@@ -608,7 +608,7 @@ pub(super) async fn run_agent_spawn(
crate::db::delete_content(crate::db::ContentKey::AbortRespawnCount(&sid));
if stage == PipelineStage::Mergemaster {
let (tx_done, done_session_id, merge_failure_reported) = {
let (tx_done, done_session_id, merge_failure_reported, merge_success_reported) = {
let mut lock = match agents_ref.lock() {
Ok(a) => a,
Err(_) => return,
@@ -618,11 +618,37 @@ pub(super) async fn run_agent_spawn(
agent.tx,
agent.session_id.or(result.session_id),
agent.merge_failure_reported,
agent.merge_success_reported,
)
} else {
(tx_clone.clone(), result.session_id, false)
(tx_clone.clone(), result.session_id, false, false)
}
};
// AC1 (bug 1008): Check for a successful merge exit BEFORE the
// transient/failure path. The merge runner sets the flag on the
// agent record and writes a DB fallback key (for the race where
// remove_agents_for_story ran first) before marking the job
// "completed". A clean exit after success → no re-spawn, no
// blocked transition, spawn count reset.
let merge_succeeded = merge_success_reported
|| crate::db::read_content(crate::db::ContentKey::MergeSuccess(&sid)).is_some();
if merge_succeeded {
crate::db::delete_content(crate::db::ContentKey::MergeSuccess(&sid));
// AC3: reset spawn count so future re-entries start fresh.
crate::db::delete_content(crate::db::ContentKey::MergeMasterSpawnCount(&sid));
slog!(
"[agents] Mergemaster '{aname}' for '{sid}' exited after \
successful merge — no re-spawn."
);
let _ = tx_done.send(AgentEvent::Done {
story_id: sid.clone(),
agent_name: aname.clone(),
session_id: done_session_id,
});
AgentPool::notify_agent_state_changed(&watcher_tx_clone);
// Do NOT send WorkItem/reassign — story is already Done.
return;
}
// Clear any stale Running merge job so the next mergemaster
// can call start_merge_agent_work without hitting "Merge
// already in progress" (bug 498).