huskies: merge 945
This commit is contained in:
@@ -59,6 +59,15 @@ pub enum PipelineEvent {
|
||||
Close,
|
||||
/// Manual demotion back to backlog from an active stage.
|
||||
Demote,
|
||||
/// Story 945: freeze a story at its current stage.
|
||||
Freeze,
|
||||
/// Story 945: unfreeze a frozen story, returning to `resume_to`.
|
||||
Unfreeze,
|
||||
/// Story 945: clear a `ReviewHold`, returning to `resume_to`.
|
||||
ReviewHoldCleared,
|
||||
/// Story 945: mergemaster has been auto-spawned and gave up; transitions
|
||||
/// `Stage::MergeFailure` → `Stage::MergeFailureFinal`.
|
||||
MergemasterAttempted,
|
||||
}
|
||||
|
||||
// ── Per-node execution events ───────────────────────────────────────────────
|
||||
@@ -98,6 +107,10 @@ pub fn event_label(e: &PipelineEvent) -> &'static str {
|
||||
PipelineEvent::Triage => "Triage",
|
||||
PipelineEvent::Close => "Close",
|
||||
PipelineEvent::Demote => "Demote",
|
||||
PipelineEvent::Freeze => "Freeze",
|
||||
PipelineEvent::Unfreeze => "Unfreeze",
|
||||
PipelineEvent::ReviewHoldCleared => "ReviewHoldCleared",
|
||||
PipelineEvent::MergemasterAttempted => "MergemasterAttempted",
|
||||
}
|
||||
}
|
||||
|
||||
@@ -172,13 +185,16 @@ pub fn transition(state: Stage, event: PipelineEvent) -> Result<Stage, Transitio
|
||||
| (Qa, Block { reason })
|
||||
| (Merge { .. }, Block { reason }) => Ok(Blocked { reason }),
|
||||
|
||||
(Backlog, ReviewHold { reason })
|
||||
| (Coding, ReviewHold { reason })
|
||||
| (Qa, ReviewHold { reason })
|
||||
| (Merge { .. }, ReviewHold { reason }) => Ok(Archived {
|
||||
archived_at: now,
|
||||
reason: ArchiveReason::ReviewHeld { reason },
|
||||
}),
|
||||
// Story 945: ReviewHold no longer auto-archives. It transitions the
|
||||
// story to `Stage::ReviewHold { resume_to, reason }`, preserving the
|
||||
// current stage as the resume target so a reviewer can clear the
|
||||
// hold and continue.
|
||||
(s @ (Backlog | Coding | Qa | Merge { .. }), PipelineEvent::ReviewHold { reason }) => {
|
||||
Ok(Stage::ReviewHold {
|
||||
resume_to: Box::new(s),
|
||||
reason,
|
||||
})
|
||||
}
|
||||
|
||||
// ── MergeFailed: Merge → MergeFailure (recoverable intermediate) ──
|
||||
(Merge { .. }, MergeFailed { reason }) => Ok(MergeFailure { reason }),
|
||||
@@ -239,6 +255,36 @@ pub fn transition(state: Stage, event: PipelineEvent) -> Result<Stage, Transitio
|
||||
merge_commit: GitSha("closed".to_string()),
|
||||
}),
|
||||
|
||||
// ── Freeze: any non-terminal stage → Frozen { resume_to } ──────
|
||||
(
|
||||
s @ (Upcoming
|
||||
| Backlog
|
||||
| Coding
|
||||
| Qa
|
||||
| Merge { .. }
|
||||
| Blocked { .. }
|
||||
| MergeFailure { .. }
|
||||
| MergeFailureFinal { .. }
|
||||
| Stage::ReviewHold { .. }),
|
||||
Freeze,
|
||||
) => Ok(Frozen {
|
||||
resume_to: Box::new(s),
|
||||
}),
|
||||
|
||||
// ── Unfreeze: Frozen → resume_to ───────────────────────────────
|
||||
(Frozen { resume_to }, Unfreeze) => Ok(*resume_to),
|
||||
|
||||
// ── ReviewHoldCleared: ReviewHold → resume_to ──────────────────
|
||||
(Stage::ReviewHold { resume_to, .. }, ReviewHoldCleared) => Ok(*resume_to),
|
||||
|
||||
// ── MergemasterAttempted: MergeFailure → MergeFailureFinal ─────
|
||||
(MergeFailure { reason }, MergemasterAttempted) => Ok(MergeFailureFinal { reason }),
|
||||
(MergeFailureFinal { reason }, MergemasterAttempted) => Ok(MergeFailureFinal { reason }),
|
||||
|
||||
// ── Unblock: from Frozen/ReviewHold → resume_to ────────────────
|
||||
(Frozen { resume_to }, Unblock) => Ok(*resume_to),
|
||||
(Stage::ReviewHold { resume_to, .. }, Unblock) => Ok(*resume_to),
|
||||
|
||||
// ── Unblock: Blocked → Coding ─────────────────────────────────
|
||||
(Blocked { .. }, Unblock) => Ok(Coding),
|
||||
|
||||
|
||||
Reference in New Issue
Block a user