diff --git a/crates/cm-api/src/vm_tool_gate.rs b/crates/cm-api/src/vm_tool_gate.rs index 6ff0d46..c48c7f2 100644 --- a/crates/cm-api/src/vm_tool_gate.rs +++ b/crates/cm-api/src/vm_tool_gate.rs @@ -890,14 +890,15 @@ mod shell_tests { .stderr(Stdio::piped()) .spawn() .expect("spawn sh"); - child - .stdin - .as_mut() - .unwrap() - .write_all( - br#"{"tool_name":"Bash","tool_input":{"command":"git push --force origin main"}}"#, - ) - .unwrap(); + // With an empty PATH `cat` is missing too, so the script never reads + // its stdin and may exit before this write lands. EPIPE here IS the + // no-node path succeeding, not a failure: CI run 6483 lost that race + // on Linux after every earlier run had won it. + if let Err(e) = child.stdin.as_mut().unwrap().write_all( + br#"{"tool_name":"Bash","tool_input":{"command":"git push --force origin main"}}"#, + ) { + assert_eq!(e.kind(), std::io::ErrorKind::BrokenPipe, "{e}"); + } let out = child.wait_with_output().expect("wait"); assert_eq!( diff --git a/scripts/verify-mission-delivery.sh b/scripts/verify-mission-delivery.sh index 6debb78..26ca3bd 100755 --- a/scripts/verify-mission-delivery.sh +++ b/scripts/verify-mission-delivery.sh @@ -357,6 +357,7 @@ assert_microvm() { # # Project memory: the brief carries earlier verdicts on this repository. assert_project_memory "$mission" microvm + assert_skill_triage "$token" "$mission" microvm # And the verdict: judged, and by whom. `independent` is only true when the # judge came from a different provider family than the agent. @@ -1106,6 +1107,7 @@ assert_chain() { # [ "$pushed" = "True" ] || fail "chain: phase $idx not pushed (commit_error=$cerr push_error=$perr)" case "$files" in 0|-) fail "chain: phase $idx delivered no files" ;; esac done <<<"$report" + assert_skill_triage "$token" "$mission" chain delivered=$(fetch_delivered "$token" "$mission" CHAIN.md) \ || { fail "chain: could not read CHAIN.md from the pushed branch"; return 1; } case "$delivered" in @@ -1222,6 +1224,40 @@ assert_credentials_revoked() { #