huskies: merge 919
This commit is contained in:
@@ -197,13 +197,34 @@ pub fn transition(state: Stage, event: PipelineEvent) -> Result<Stage, Transitio
|
||||
}
|
||||
|
||||
// ── MergeFailed: Merge → MergeFailure (recoverable intermediate) ──
|
||||
(Merge { .. }, MergeFailed { reason }) => Ok(MergeFailure { reason }),
|
||||
(
|
||||
Merge {
|
||||
feature_branch,
|
||||
commits_ahead,
|
||||
},
|
||||
MergeFailed { reason },
|
||||
) => Ok(MergeFailure {
|
||||
reason,
|
||||
feature_branch,
|
||||
commits_ahead,
|
||||
}),
|
||||
|
||||
// ── MergeFailure self-loop: repeated failure is a no-op ─────────────
|
||||
// When the mergemaster retries and fails again while the story is already
|
||||
// in MergeFailure, treat it as a silent self-transition so callers can
|
||||
// detect the no-op via `fired.before == MergeFailure` and skip re-notifying.
|
||||
(MergeFailure { .. }, MergeFailed { reason }) => Ok(MergeFailure { reason }),
|
||||
(
|
||||
MergeFailure {
|
||||
feature_branch,
|
||||
commits_ahead,
|
||||
..
|
||||
},
|
||||
MergeFailed { reason },
|
||||
) => Ok(MergeFailure {
|
||||
reason,
|
||||
feature_branch,
|
||||
commits_ahead,
|
||||
}),
|
||||
|
||||
(Merge { .. }, MergeFailedFinal { reason }) => Ok(Archived {
|
||||
archived_at: now,
|
||||
@@ -278,7 +299,7 @@ pub fn transition(state: Stage, event: PipelineEvent) -> Result<Stage, Transitio
|
||||
(Stage::ReviewHold { resume_to, .. }, ReviewHoldCleared) => Ok(*resume_to),
|
||||
|
||||
// ── MergemasterAttempted: MergeFailure → MergeFailureFinal ─────
|
||||
(MergeFailure { reason }, MergemasterAttempted) => Ok(MergeFailureFinal { reason }),
|
||||
(MergeFailure { reason, .. }, MergemasterAttempted) => Ok(MergeFailureFinal { reason }),
|
||||
(MergeFailureFinal { reason }, MergemasterAttempted) => Ok(MergeFailureFinal { reason }),
|
||||
|
||||
// ── Unblock: from Frozen/ReviewHold → resume_to ────────────────
|
||||
@@ -288,11 +309,21 @@ pub fn transition(state: Stage, event: PipelineEvent) -> Result<Stage, Transitio
|
||||
// ── Unblock: Blocked → Coding ─────────────────────────────────
|
||||
(Blocked { .. }, Unblock) => Ok(Coding),
|
||||
|
||||
// ── Unblock MergeFailure → Coding (retry) ────────────────────────
|
||||
// `unblock_story` on a failed merge re-enters the coding stage so a
|
||||
// coder agent can rework the branch, rather than routing back through
|
||||
// the backlog (which would require an extra DepsMet promotion step).
|
||||
(MergeFailure { .. }, Unblock) => Ok(Coding),
|
||||
// ── Unblock MergeFailure → Merge (re-attempt) ────────────────────
|
||||
// `unblock_story` on a failed merge re-queues it for merge, restoring
|
||||
// the exact `Merge { feature_branch, commits_ahead }` that was in place
|
||||
// before the failure so the mergemaster can retry immediately.
|
||||
(
|
||||
MergeFailure {
|
||||
feature_branch,
|
||||
commits_ahead,
|
||||
..
|
||||
},
|
||||
Unblock,
|
||||
) => Ok(Merge {
|
||||
feature_branch,
|
||||
commits_ahead,
|
||||
}),
|
||||
|
||||
// ── Demote MergeFailure → Backlog (manual parking) ───────────────
|
||||
// Lets operators park a failed-merge story in the backlog without an
|
||||
|
||||
Reference in New Issue
Block a user