huskies: merge 987

This commit is contained in:
dave
2026-05-13 16:26:09 +00:00
parent 430079ecbc
commit c3c9db3d8b
13 changed files with 662 additions and 311 deletions
+26 -17
View File
@@ -87,27 +87,36 @@ pub(super) fn tool_get_merge_status(args: &Value, ctx: &AppContext) -> Result<St
.map_err(|e| format!("Serialization error: {e}"))
}
crate::agents::merge::MergeJobStatus::Completed(report) => {
let status_msg = if report.success && report.gates_passed && report.conflicts_resolved {
"Merge complete: conflicts were auto-resolved and all quality gates passed. Story moved to done and worktree cleaned up."
} else if report.success && report.gates_passed {
"Merge complete: all quality gates passed. Story moved to done and worktree cleaned up."
} else if report.had_conflicts && !report.conflicts_resolved {
"Merge failed: conflicts detected that could not be auto-resolved. Merge was aborted — master is untouched. Call report_merge_failure with the conflict details so the human can resolve them. Do NOT manually move the story file or call accept_story."
} else if report.success && !report.gates_passed {
"Merge committed but quality gates failed. Review gate_output and fix issues before re-running."
} else {
"Merge failed. Review gate_output for details. Call report_merge_failure to record the failure. Do NOT manually move the story file or call accept_story."
};
use crate::agents::merge::MergeResult;
let status_msg = crate::service::merge::format_merge_status_message(report);
let (success, had_conflicts, conflicts_resolved, conflict_details, gates_passed, gate_output) =
match &report.result {
MergeResult::Success { conflicts_resolved, conflict_details, gate_output } => {
(true, *conflicts_resolved, *conflicts_resolved, conflict_details.clone(), true, gate_output.clone())
}
MergeResult::Conflict { details, output } => {
(false, true, false, details.clone(), false, output.clone())
}
MergeResult::GateFailure { output, .. } => {
(false, false, false, None, false, output.clone())
}
MergeResult::NoCommits { output } => {
(false, false, false, None, false, output.clone())
}
MergeResult::Other { output, conflict_details } => {
(false, false, false, conflict_details.clone(), false, output.clone())
}
};
serde_json::to_string_pretty(&json!({
"story_id": story_id,
"status": "completed",
"success": report.success,
"had_conflicts": report.had_conflicts,
"conflicts_resolved": report.conflicts_resolved,
"conflict_details": report.conflict_details,
"gates_passed": report.gates_passed,
"gate_output": report.gate_output,
"success": success,
"had_conflicts": had_conflicts,
"conflicts_resolved": conflicts_resolved,
"conflict_details": conflict_details,
"gates_passed": gates_passed,
"gate_output": gate_output,
"worktree_cleaned_up": report.worktree_cleaned_up,
"story_archived": report.story_archived,
"message": status_msg,