From 4ccc3d91497048beac2db443e1c30fbcf7780bed Mon Sep 17 00:00:00 2001 From: Dave Date: Sat, 21 Mar 2026 21:48:30 +0000 Subject: [PATCH] storkit: merge 361_story_remove_deprecated_manual_qa_front_matter_field --- server/src/agents/gates.rs | 20 ++++++++++++-------- server/src/agents/pool/mod.rs | 9 +-------- server/src/io/story_metadata.rs | 32 ++------------------------------ 3 files changed, 15 insertions(+), 46 deletions(-) diff --git a/server/src/agents/gates.rs b/server/src/agents/gates.rs index 53436dd..cbbf9b4 100644 --- a/server/src/agents/gates.rs +++ b/server/src/agents/gates.rs @@ -254,9 +254,10 @@ mod tests { fn run_project_tests_uses_script_test_when_present_and_passes() { use std::fs; use std::os::unix::fs::PermissionsExt; - use tempfile::tempdir; - let tmp = tempdir().unwrap(); + let tmp = tempfile::Builder::new() + .tempdir_in(env!("CARGO_MANIFEST_DIR")) + .unwrap(); let path = tmp.path(); let script_dir = path.join("script"); fs::create_dir_all(&script_dir).unwrap(); @@ -276,9 +277,10 @@ mod tests { fn run_project_tests_reports_failure_when_script_test_exits_nonzero() { use std::fs; use std::os::unix::fs::PermissionsExt; - use tempfile::tempdir; - let tmp = tempdir().unwrap(); + let tmp = tempfile::Builder::new() + .tempdir_in(env!("CARGO_MANIFEST_DIR")) + .unwrap(); let path = tmp.path(); let script_dir = path.join("script"); fs::create_dir_all(&script_dir).unwrap(); @@ -313,9 +315,10 @@ mod tests { fn coverage_gate_passes_when_script_exits_zero() { use std::fs; use std::os::unix::fs::PermissionsExt; - use tempfile::tempdir; - let tmp = tempdir().unwrap(); + let tmp = tempfile::Builder::new() + .tempdir_in(env!("CARGO_MANIFEST_DIR")) + .unwrap(); let path = tmp.path(); let script_dir = path.join("script"); fs::create_dir_all(&script_dir).unwrap(); @@ -342,9 +345,10 @@ mod tests { fn coverage_gate_fails_when_script_exits_nonzero() { use std::fs; use std::os::unix::fs::PermissionsExt; - use tempfile::tempdir; - let tmp = tempdir().unwrap(); + let tmp = tempfile::Builder::new() + .tempdir_in(env!("CARGO_MANIFEST_DIR")) + .unwrap(); let path = tmp.path(); let script_dir = path.join("script"); fs::create_dir_all(&script_dir).unwrap(); diff --git a/server/src/agents/pool/mod.rs b/server/src/agents/pool/mod.rs index 0ff5436..c26c6a6 100644 --- a/server/src/agents/pool/mod.rs +++ b/server/src/agents/pool/mod.rs @@ -1187,14 +1187,7 @@ mod tests { /// Returns true if a process with the given PID is currently running. fn process_is_running(pid: u32) -> bool { - std::process::Command::new("ps") - .arg("-p") - .arg(pid.to_string()) - .stdout(std::process::Stdio::null()) - .stderr(std::process::Stdio::null()) - .status() - .map(|s| s.success()) - .unwrap_or(false) + std::path::Path::new(&format!("/proc/{pid}")).exists() } #[test] diff --git a/server/src/io/story_metadata.rs b/server/src/io/story_metadata.rs index e9f48dc..12b44d9 100644 --- a/server/src/io/story_metadata.rs +++ b/server/src/io/story_metadata.rs @@ -77,10 +77,8 @@ struct FrontMatter { merge_failure: Option, agent: Option, review_hold: Option, - /// New configurable QA mode field: "human", "server", or "agent". + /// Configurable QA mode field: "human", "server", or "agent". qa: Option, - /// Legacy boolean field — mapped to `qa: human` (true) or ignored (false/absent). - manual_qa: Option, /// Number of times this story has been retried at its current pipeline stage. retry_count: Option, /// When `true`, auto-assign will skip this story (retry limit exceeded). @@ -113,12 +111,7 @@ pub fn parse_front_matter(contents: &str) -> Result StoryMetadata { - // Resolve qa mode: prefer the new `qa` field, fall back to legacy `manual_qa`. - let qa = if let Some(ref qa_str) = front.qa { - QaMode::from_str(qa_str) - } else { - front.manual_qa.and_then(|v| if v { Some(QaMode::Human) } else { None }) - }; + let qa = front.qa.as_deref().and_then(QaMode::from_str); StoryMetadata { name: front.name, @@ -513,27 +506,6 @@ workflow: tdd assert_eq!(meta.qa, None); } - #[test] - fn legacy_manual_qa_true_maps_to_human() { - let input = "---\nname: Story\nmanual_qa: true\n---\n# Story\n"; - let meta = parse_front_matter(input).expect("front matter"); - assert_eq!(meta.qa, Some(QaMode::Human)); - } - - #[test] - fn legacy_manual_qa_false_maps_to_none() { - let input = "---\nname: Story\nmanual_qa: false\n---\n# Story\n"; - let meta = parse_front_matter(input).expect("front matter"); - assert_eq!(meta.qa, None); - } - - #[test] - fn qa_field_takes_precedence_over_manual_qa() { - let input = "---\nname: Story\nqa: server\nmanual_qa: true\n---\n# Story\n"; - let meta = parse_front_matter(input).expect("front matter"); - assert_eq!(meta.qa, Some(QaMode::Server)); - } - #[test] fn resolve_qa_mode_uses_file_value() { let tmp = tempfile::tempdir().unwrap();