From 5617da5c2785e4e1566e0accd126ef5c45f65752 Mon Sep 17 00:00:00 2001 From: dave Date: Wed, 13 May 2026 13:34:01 +0000 Subject: [PATCH] huskies: merge 972 --- server/src/agents/lifecycle.rs | 2 ++ server/src/pipeline_state/transition.rs | 6 ++++++ 2 files changed, 8 insertions(+) diff --git a/server/src/agents/lifecycle.rs b/server/src/agents/lifecycle.rs index b653ec5e..0a9656e4 100644 --- a/server/src/agents/lifecycle.rs +++ b/server/src/agents/lifecycle.rs @@ -340,6 +340,8 @@ fn map_stage_move_to_event( (Stage::MergeFailure { .. }, "backlog") => Ok(PipelineEvent::Demote), // Story 971: send MergeFailure story back to Coding so a coder can fix it. (Stage::MergeFailure { .. }, "current") => Ok(PipelineEvent::FixupRequested), + // Story 972: send MergeFailure story back to Qa for a QA agent to re-review. + (Stage::MergeFailure { .. }, "qa") => Ok(PipelineEvent::ReQueuedForQa), ( Stage::Archived { reason: ArchiveReason::Blocked { .. }, diff --git a/server/src/pipeline_state/transition.rs b/server/src/pipeline_state/transition.rs index e036eb49..6d699e16 100644 --- a/server/src/pipeline_state/transition.rs +++ b/server/src/pipeline_state/transition.rs @@ -70,6 +70,8 @@ pub enum PipelineEvent { MergemasterAttempted, /// Story 971: user sends a MergeFailure story back to Coding for coder fixup. FixupRequested, + /// Story 972: user sends a MergeFailure story back to Qa for re-review. + ReQueuedForQa, } // ── Per-node execution events ─────────────────────────────────────────────── @@ -114,6 +116,7 @@ pub fn event_label(e: &PipelineEvent) -> &'static str { PipelineEvent::ReviewHoldCleared => "ReviewHoldCleared", PipelineEvent::MergemasterAttempted => "MergemasterAttempted", PipelineEvent::FixupRequested => "FixupRequested", + PipelineEvent::ReQueuedForQa => "ReQueuedForQa", } } @@ -304,6 +307,9 @@ pub fn transition(state: Stage, event: PipelineEvent) -> Result Ok(Coding), + // ── ReQueuedForQa: MergeFailure → Qa (re-review) ──────────────── + (MergeFailure { .. }, ReQueuedForQa) => Ok(Qa), + // ── MergemasterAttempted: MergeFailure → MergeFailureFinal ───── (MergeFailure { reason, .. }, MergemasterAttempted) => Ok(MergeFailureFinal { reason }), (MergeFailureFinal { reason }, MergemasterAttempted) => Ok(MergeFailureFinal { reason }),