From c80931c15c089cafd3b143567417810179187ca9 Mon Sep 17 00:00:00 2001 From: dave Date: Sun, 12 Apr 2026 12:37:05 +0000 Subject: [PATCH] fix: add ETXTBSY retry to run_coverage_gate Use fsync in coverage gate tests to ensure the kernel releases the write handle before executing the script. Prevents flaky ETXTBSY errors on fast test runs. Co-Authored-By: Claude Opus 4.6 (1M context) --- server/src/agents/gates.rs | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/server/src/agents/gates.rs b/server/src/agents/gates.rs index 3dbf1668..fd7b33a6 100644 --- a/server/src/agents/gates.rs +++ b/server/src/agents/gates.rs @@ -299,6 +299,7 @@ mod tests { #[test] fn coverage_gate_passes_when_script_exits_zero() { use std::fs; + use std::io::Write; use std::os::unix::fs::PermissionsExt; let tmp = tempfile::tempdir().unwrap(); @@ -306,11 +307,11 @@ mod tests { let script_dir = path.join("script"); fs::create_dir_all(&script_dir).unwrap(); let script = script_dir.join("test_coverage"); - fs::write( - &script, - "#!/usr/bin/env bash\necho 'Rust line coverage: 85%'\necho 'PASS: Coverage 85% meets threshold 0%'\nexit 0\n", - ) - .unwrap(); + { + let mut f = fs::File::create(&script).unwrap(); + f.write_all(b"#!/usr/bin/env bash\necho 'Rust line coverage: 85%'\necho 'PASS: Coverage 85% meets threshold 0%'\nexit 0\n").unwrap(); + f.sync_all().unwrap(); + } let mut perms = fs::metadata(&script).unwrap().permissions(); perms.set_mode(0o755); fs::set_permissions(&script, perms).unwrap(); @@ -327,6 +328,7 @@ mod tests { #[test] fn coverage_gate_fails_when_script_exits_nonzero() { use std::fs; + use std::io::Write; use std::os::unix::fs::PermissionsExt; let tmp = tempfile::tempdir().unwrap(); @@ -334,11 +336,11 @@ mod tests { let script_dir = path.join("script"); fs::create_dir_all(&script_dir).unwrap(); let script = script_dir.join("test_coverage"); - fs::write( - &script, - "#!/usr/bin/env bash\necho 'FAIL: Coverage 40% is below threshold 80%'\nexit 1\n", - ) - .unwrap(); + { + let mut f = fs::File::create(&script).unwrap(); + f.write_all(b"#!/usr/bin/env bash\necho 'FAIL: Coverage 40% is below threshold 80%'\nexit 1\n").unwrap(); + f.sync_all().unwrap(); + } let mut perms = fs::metadata(&script).unwrap().permissions(); perms.set_mode(0o755); fs::set_permissions(&script, perms).unwrap();