huskies: merge 757
This commit is contained in:
@@ -77,8 +77,7 @@ impl AgentPool {
|
||||
"[pipeline] Failed to move '{story_id}' to 4_merge/: {e}"
|
||||
);
|
||||
} else {
|
||||
self.start_mergemaster_or_block(&project_root, story_id)
|
||||
.await;
|
||||
self.trigger_server_side_merge(&project_root, story_id);
|
||||
}
|
||||
}
|
||||
crate::io::story_metadata::QaMode::Agent => {
|
||||
@@ -151,8 +150,7 @@ impl AgentPool {
|
||||
"[pipeline] Failed to move '{story_id}' to 4_merge/: {e}"
|
||||
);
|
||||
} else {
|
||||
self.start_mergemaster_or_block(&project_root, story_id)
|
||||
.await;
|
||||
self.trigger_server_side_merge(&project_root, story_id);
|
||||
}
|
||||
}
|
||||
crate::io::story_metadata::QaMode::Agent => {
|
||||
@@ -272,8 +270,7 @@ impl AgentPool {
|
||||
"[pipeline] Failed to move '{story_id}' to 4_merge/: {e}"
|
||||
);
|
||||
} else {
|
||||
self.start_mergemaster_or_block(&project_root, story_id)
|
||||
.await;
|
||||
self.trigger_server_side_merge(&project_root, story_id);
|
||||
}
|
||||
}
|
||||
} else if let Some(reason) =
|
||||
@@ -440,41 +437,6 @@ impl AgentPool {
|
||||
// become available (bug 295).
|
||||
self.auto_assign_available_work(&project_root).await;
|
||||
}
|
||||
|
||||
/// Start the mergemaster agent for `story_id`, but only if the feature
|
||||
/// branch has commits that are not yet on master.
|
||||
///
|
||||
/// If the branch has zero commits ahead of master, this logs an error and
|
||||
/// sends a [`WatcherEvent::StoryBlocked`] instead of spawning a Claude
|
||||
/// session. A no-op merge session was observed spending $0.82 in the
|
||||
/// 2026-04-09 incident (story 519).
|
||||
async fn start_mergemaster_or_block(&self, project_root: &Path, story_id: &str) {
|
||||
let branch = format!("feature/story-{story_id}");
|
||||
if !crate::agents::lifecycle::feature_branch_has_unmerged_changes(project_root, story_id) {
|
||||
slog_error!(
|
||||
"[mergemaster] Branch '{branch}' has no commits ahead of master — \
|
||||
refusing to spawn merge session. \
|
||||
Likely cause: the worktree was reset to master after the feature \
|
||||
branch's commits were created. Investigate the worktree's git state \
|
||||
before retrying. Story '{story_id}' stays in 4_merge/ for human review."
|
||||
);
|
||||
let _ = self.watcher_tx.send(WatcherEvent::StoryBlocked {
|
||||
story_id: story_id.to_string(),
|
||||
reason: format!(
|
||||
"Feature branch '{branch}' has no commits ahead of master — nothing to merge. \
|
||||
The worktree may have been reset to master. \
|
||||
Check the worktree's git state and retry manually."
|
||||
),
|
||||
});
|
||||
return;
|
||||
}
|
||||
if let Err(e) = self
|
||||
.start_agent(project_root, story_id, Some("mergemaster"), None, None)
|
||||
.await
|
||||
{
|
||||
slog_error!("[pipeline] Failed to start mergemaster for '{story_id}': {e}");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// Spawn pipeline advancement as a background task.
|
||||
|
||||
Reference in New Issue
Block a user