huskies: merge 1008
This commit is contained in:
@@ -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).
|
||||
|
||||
Reference in New Issue
Block a user