huskies: merge 987
This commit is contained in:
@@ -105,22 +105,35 @@ impl AgentPool {
|
||||
return;
|
||||
}
|
||||
|
||||
let success = matches!(&report, Ok(r) if r.success);
|
||||
let success = matches!(
|
||||
&report,
|
||||
Ok(r) if matches!(r.result, crate::agents::merge::MergeResult::Success { .. })
|
||||
);
|
||||
|
||||
let finished_at = unix_now();
|
||||
|
||||
// On any failure: record merge_failure in CRDT and emit notification.
|
||||
if !success {
|
||||
let kind = match &report {
|
||||
Ok(r) if r.no_commits => crate::pipeline_state::MergeFailureKind::NoCommits,
|
||||
Ok(r) if r.had_conflicts => {
|
||||
crate::pipeline_state::MergeFailureKind::ConflictDetected(
|
||||
r.conflict_details.clone(),
|
||||
)
|
||||
}
|
||||
Ok(r) => {
|
||||
crate::pipeline_state::MergeFailureKind::GatesFailed(r.gate_output.clone())
|
||||
}
|
||||
Ok(r) => match &r.result {
|
||||
crate::agents::merge::MergeResult::NoCommits { .. } => {
|
||||
crate::pipeline_state::MergeFailureKind::NoCommits
|
||||
}
|
||||
crate::agents::merge::MergeResult::Conflict { details, .. } => {
|
||||
crate::pipeline_state::MergeFailureKind::ConflictDetected(
|
||||
details.clone(),
|
||||
)
|
||||
}
|
||||
crate::agents::merge::MergeResult::GateFailure { output, .. } => {
|
||||
crate::pipeline_state::MergeFailureKind::GatesFailed(output.clone())
|
||||
}
|
||||
crate::agents::merge::MergeResult::Other { output, .. } => {
|
||||
crate::pipeline_state::MergeFailureKind::Other(output.clone())
|
||||
}
|
||||
crate::agents::merge::MergeResult::Success { .. } => {
|
||||
unreachable!("success branch is guarded by !success above")
|
||||
}
|
||||
},
|
||||
Err(e) => crate::pipeline_state::MergeFailureKind::Other(e.clone()),
|
||||
};
|
||||
let is_no_commits =
|
||||
@@ -131,7 +144,17 @@ impl AgentPool {
|
||||
&& report
|
||||
.as_ref()
|
||||
.ok()
|
||||
.and_then(|r| r.gate_failure_kind.as_ref())
|
||||
.and_then(|r| {
|
||||
if let crate::agents::merge::MergeResult::GateFailure {
|
||||
failure_kind: Some(k),
|
||||
..
|
||||
} = &r.result
|
||||
{
|
||||
Some(k)
|
||||
} else {
|
||||
None
|
||||
}
|
||||
})
|
||||
.map(|k| k.is_self_evident_fix())
|
||||
.unwrap_or(false);
|
||||
|
||||
@@ -271,17 +294,13 @@ impl AgentPool {
|
||||
.await
|
||||
.map_err(|e| format!("Merge task panicked: {e}"))??;
|
||||
|
||||
if !merge_result.success {
|
||||
if !matches!(
|
||||
merge_result,
|
||||
crate::agents::merge::MergeResult::Success { .. }
|
||||
) {
|
||||
return Ok(crate::agents::merge::MergeReport {
|
||||
story_id: story_id.to_string(),
|
||||
success: false,
|
||||
had_conflicts: merge_result.had_conflicts,
|
||||
conflicts_resolved: merge_result.conflicts_resolved,
|
||||
conflict_details: merge_result.conflict_details,
|
||||
gates_passed: merge_result.gates_passed,
|
||||
gate_output: merge_result.output,
|
||||
gate_failure_kind: merge_result.gate_failure_kind,
|
||||
no_commits: merge_result.no_commits,
|
||||
result: merge_result,
|
||||
worktree_cleaned_up: false,
|
||||
story_archived: false,
|
||||
});
|
||||
@@ -305,14 +324,7 @@ impl AgentPool {
|
||||
|
||||
Ok(crate::agents::merge::MergeReport {
|
||||
story_id: story_id.to_string(),
|
||||
success: true,
|
||||
had_conflicts: merge_result.had_conflicts,
|
||||
conflicts_resolved: merge_result.conflicts_resolved,
|
||||
conflict_details: merge_result.conflict_details,
|
||||
gates_passed: true,
|
||||
gate_output: merge_result.output,
|
||||
gate_failure_kind: None,
|
||||
no_commits: false,
|
||||
result: merge_result,
|
||||
worktree_cleaned_up,
|
||||
story_archived,
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user