If I use the action cmd_ Shell (FileStdout "foo.txt") "make-foo -" and the action fails, for example because make-foo is not in the $PATH, then shake will erase the content of foo.txt if it exists. I would expect that it is never the expected behaviour.
This could be solved either by a warning in the docs and possibly an alternate option like FileStdoutSuccess or a function writeStdout :: FilePath -> Action (Exit, Stdout String) -> Action (), or by changing the behaviour of FileStdout.