huskies: merge 987
This commit is contained in:
@@ -3,7 +3,7 @@
|
||||
//! These functions transform a completed merge report into human-readable
|
||||
//! status messages. No I/O: they are pure functions over plain data.
|
||||
|
||||
use crate::agents::merge::MergeReport;
|
||||
use crate::agents::merge::{MergeReport, MergeResult};
|
||||
|
||||
#[allow(dead_code)]
|
||||
/// Derive a human-readable status message from a completed [`MergeReport`].
|
||||
@@ -11,16 +11,25 @@ use crate::agents::merge::MergeReport;
|
||||
/// The message explains what happened and (on failure) what the caller
|
||||
/// should do next.
|
||||
pub fn format_merge_status_message(report: &MergeReport) -> &'static str {
|
||||
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."
|
||||
match &report.result {
|
||||
MergeResult::Success {
|
||||
conflicts_resolved: true,
|
||||
..
|
||||
} => {
|
||||
"Merge complete: conflicts were auto-resolved and all quality gates passed. Story moved to done and worktree cleaned up."
|
||||
}
|
||||
MergeResult::Success { .. } => {
|
||||
"Merge complete: all quality gates passed. Story moved to done and worktree cleaned up."
|
||||
}
|
||||
MergeResult::Conflict { .. } => {
|
||||
"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."
|
||||
}
|
||||
MergeResult::GateFailure { .. } => {
|
||||
"Merge committed but quality gates failed. Review gate_output and fix issues before re-running."
|
||||
}
|
||||
MergeResult::NoCommits { .. } | MergeResult::Other { .. } => {
|
||||
"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."
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -29,23 +38,12 @@ pub fn format_merge_status_message(report: &MergeReport) -> &'static str {
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::*;
|
||||
use crate::agents::merge::MergeResult;
|
||||
|
||||
fn report(
|
||||
success: bool,
|
||||
had_conflicts: bool,
|
||||
conflicts_resolved: bool,
|
||||
gates_passed: bool,
|
||||
) -> MergeReport {
|
||||
fn make_report(result: MergeResult) -> MergeReport {
|
||||
MergeReport {
|
||||
story_id: String::new(),
|
||||
success,
|
||||
had_conflicts,
|
||||
conflicts_resolved,
|
||||
conflict_details: None,
|
||||
gates_passed,
|
||||
gate_output: String::new(),
|
||||
gate_failure_kind: None,
|
||||
no_commits: false,
|
||||
result,
|
||||
worktree_cleaned_up: false,
|
||||
story_archived: false,
|
||||
}
|
||||
@@ -53,7 +51,11 @@ mod tests {
|
||||
|
||||
#[test]
|
||||
fn clean_merge_message() {
|
||||
let r = report(true, false, false, true);
|
||||
let r = make_report(MergeResult::Success {
|
||||
conflicts_resolved: false,
|
||||
conflict_details: None,
|
||||
gate_output: String::new(),
|
||||
});
|
||||
let msg = format_merge_status_message(&r);
|
||||
assert!(msg.contains("quality gates passed"));
|
||||
assert!(msg.contains("done"));
|
||||
@@ -61,14 +63,21 @@ mod tests {
|
||||
|
||||
#[test]
|
||||
fn conflicts_resolved_message() {
|
||||
let r = report(true, true, true, true);
|
||||
let r = make_report(MergeResult::Success {
|
||||
conflicts_resolved: true,
|
||||
conflict_details: None,
|
||||
gate_output: String::new(),
|
||||
});
|
||||
let msg = format_merge_status_message(&r);
|
||||
assert!(msg.contains("auto-resolved"));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn unresolved_conflicts_message() {
|
||||
let r = report(false, true, false, false);
|
||||
let r = make_report(MergeResult::Conflict {
|
||||
details: None,
|
||||
output: String::new(),
|
||||
});
|
||||
let msg = format_merge_status_message(&r);
|
||||
assert!(msg.contains("could not be auto-resolved"));
|
||||
assert!(msg.contains("report_merge_failure"));
|
||||
@@ -76,14 +85,20 @@ mod tests {
|
||||
|
||||
#[test]
|
||||
fn gates_failed_message() {
|
||||
let r = report(true, false, false, false);
|
||||
let r = make_report(MergeResult::GateFailure {
|
||||
output: String::new(),
|
||||
failure_kind: None,
|
||||
});
|
||||
let msg = format_merge_status_message(&r);
|
||||
assert!(msg.contains("quality gates failed"));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn general_failure_message() {
|
||||
let r = report(false, false, false, false);
|
||||
let r = make_report(MergeResult::Other {
|
||||
output: String::new(),
|
||||
conflict_details: None,
|
||||
});
|
||||
let msg = format_merge_status_message(&r);
|
||||
assert!(msg.contains("Merge failed"));
|
||||
assert!(msg.contains("report_merge_failure"));
|
||||
|
||||
Reference in New Issue
Block a user