huskies: merge 1100 bug Multiple LLM agents can run concurrently on the same story (coder + mergemaster + others) — enforce one-agent-per-story invariant
This commit is contained in:
@@ -2,11 +2,11 @@
|
||||
|
||||
use std::path::Path;
|
||||
|
||||
use crate::config::ProjectConfig;
|
||||
use crate::pipeline_state::Stage;
|
||||
|
||||
use super::super::super::{PipelineStage, agent_config_stage, pipeline_stage};
|
||||
use super::super::super::{
|
||||
PipelineStage, agent_config_stage, canonical_pipeline_stage, pipeline_stage,
|
||||
};
|
||||
use super::super::worktree::find_active_story_stage;
|
||||
use crate::config::ProjectConfig;
|
||||
|
||||
/// Validate that an explicit `agent_name` is allowed to attach to `story_id`'s
|
||||
/// current pipeline stage.
|
||||
@@ -34,16 +34,15 @@ pub(super) fn validate_agent_stage(
|
||||
let Some(story_stage) = find_active_story_stage(project_root, story_id) else {
|
||||
return Ok(());
|
||||
};
|
||||
let expected_stage = match story_stage {
|
||||
Stage::Coding { .. } => PipelineStage::Coder,
|
||||
Stage::Qa => PipelineStage::Qa,
|
||||
Stage::Merge { .. } => PipelineStage::Mergemaster,
|
||||
_ => PipelineStage::Other,
|
||||
};
|
||||
if expected_stage != PipelineStage::Other && expected_stage != agent_stage {
|
||||
let canonical = canonical_pipeline_stage(&story_stage);
|
||||
let is_llm = matches!(
|
||||
agent_stage,
|
||||
PipelineStage::Coder | PipelineStage::Qa | PipelineStage::Mergemaster
|
||||
);
|
||||
if is_llm && (canonical.is_none() || canonical.as_ref() != Some(&agent_stage)) {
|
||||
return Err(format!(
|
||||
"Agent '{name}' (stage: {agent_stage:?}) cannot be assigned to \
|
||||
story '{story_id}' in {}/ (requires stage: {expected_stage:?})",
|
||||
story '{story_id}' in {}/ (requires stage: {canonical:?})",
|
||||
story_stage.dir_name()
|
||||
));
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user