story-kit: merge 247_story_human_qa_gate_with_rejection_flow
This commit is contained in:
@@ -24,6 +24,12 @@ pub struct UpcomingStory {
|
||||
pub merge_failure: Option<String>,
|
||||
/// Active agent working on this item, if any.
|
||||
pub agent: Option<AgentAssignment>,
|
||||
/// True when the item is held in QA for human review.
|
||||
#[serde(skip_serializing_if = "Option::is_none")]
|
||||
pub review_hold: Option<bool>,
|
||||
/// Whether the item requires manual QA (defaults to true when absent).
|
||||
#[serde(skip_serializing_if = "Option::is_none")]
|
||||
pub manual_qa: Option<bool>,
|
||||
}
|
||||
|
||||
pub struct StoryValidationResult {
|
||||
@@ -117,12 +123,12 @@ fn load_stage_items(
|
||||
.to_string();
|
||||
let contents = fs::read_to_string(&path)
|
||||
.map_err(|e| format!("Failed to read story file {}: {e}", path.display()))?;
|
||||
let (name, error, merge_failure) = match parse_front_matter(&contents) {
|
||||
Ok(meta) => (meta.name, None, meta.merge_failure),
|
||||
Err(e) => (None, Some(e.to_string()), None),
|
||||
let (name, error, merge_failure, review_hold, manual_qa) = match parse_front_matter(&contents) {
|
||||
Ok(meta) => (meta.name, None, meta.merge_failure, meta.review_hold, meta.manual_qa),
|
||||
Err(e) => (None, Some(e.to_string()), None, None, None),
|
||||
};
|
||||
let agent = agent_map.get(&story_id).cloned();
|
||||
stories.push(UpcomingStory { story_id, name, error, merge_failure, agent });
|
||||
stories.push(UpcomingStory { story_id, name, error, merge_failure, agent, review_hold, manual_qa });
|
||||
}
|
||||
|
||||
stories.sort_by(|a, b| a.story_id.cmp(&b.story_id));
|
||||
|
||||
Reference in New Issue
Block a user