{
 "arm": "W-ps51",
 "shell": "powershell -NoProfile -Command",
 "when": "2026-09-28T16:37:10",
 "host": "BLACK-5800G",
 "n": 76,
 "counts": {
  "ok": 20,
  "exit-differs": 34,
  "crlf": 4,
  "output-differs": 14,
  "not-found": 4
 },
 "survival_pct": 26.3,
 "results": [
  {
   "id": "red-devnull",
   "category": "redirection",
   "command": "echo hi > /dev/null; echo done",
   "expected_stdout": "done",
   "expected_exit": 0,
   "exit": 0,
   "stdout": "done\r\n",
   "stderr": "out-file : Could not find a part of the path 'C:\\dev\\null'.\r\nAt line:1 char:1\r\n+ echo hi > /dev/null; echo done\r\n+ ~~~~~~~~~~~~~~~~~~~\r\n    + CategoryInfo          : OpenError: (:) [Out-File], DirectoryNotFoundException\r\n    + FullyQualifiedErrorId : FileOpenFailure,Microsoft.PowerShell.Commands.OutFileCommand\r\n \r\n",
   "outcome": "ok"
  },
  {
   "id": "red-stderr",
   "category": "redirection",
   "command": "ls nosuchfile 2>/dev/null; echo done",
   "expected_stdout": "done",
   "expected_exit": 0,
   "exit": 0,
   "stdout": "done\r\n",
   "stderr": "out-file : Could not find a part of the path 'C:\\dev\\null'.\r\nAt line:1 char:1\r\n+ ls nosuchfile 2>/dev/null; echo done\r\n+ ~~~~~~~~~~~~~~~~~~~~~~~~~\r\n    + CategoryInfo          : OpenError: (:) [Out-File], DirectoryNotFoundException\r\n    + FullyQualifiedErrorId : FileOpenFailure,Microsoft.PowerShell.Commands.OutFileCommand\r\n \r\n",
   "outcome": "ok"
  },
  {
   "id": "red-combine",
   "category": "redirection",
   "command": "echo out; echo err 1>&2",
   "expected_stdout": "out",
   "expected_exit": 0,
   "exit": 1,
   "stdout": "",
   "stderr": "At line:1 char:20\r\n+ echo out; echo err 1>&2\r\n+                    ~~~~\r\nThe '1>&2' operator is reserved for future use.\r\n    + CategoryInfo          : ParserError: (:) [], ParentContainsErrorRecordException\r\n    + FullyQualifiedErrorId : RedirectionNotSupported\r\n \r\n",
   "outcome": "exit-differs"
  },
  {
   "id": "red-append",
   "category": "redirection",
   "command": "echo a > f1; echo b >> f1; cat f1",
   "expected_stdout": "a\nb",
   "expected_exit": 0,
   "exit": 0,
   "stdout": "a\r\nb\r\n",
   "stderr": "",
   "outcome": "crlf"
  },
  {
   "id": "red-pipe",
   "category": "redirection",
   "command": "echo hello | tr a-z A-Z",
   "expected_stdout": "HELLO",
   "expected_exit": 0,
   "exit": 0,
   "stdout": "HELLO\r\n",
   "stderr": "",
   "outcome": "ok"
  },
  {
   "id": "red-heredoc",
   "category": "redirection",
   "command": "cat <<EOF\nline1\nline2\nEOF",
   "expected_stdout": "line1\nline2",
   "expected_exit": 0,
   "exit": 1,
   "stdout": "",
   "stderr": "At line:1 char:6\r\n+ cat <<EOF\r\n+      ~\r\nMissing file specification after redirection operator.\r\nAt line:1 char:5\r\n+ cat <<EOF\r\n+     ~\r\nThe '<' operator is reserved for future use.\r\nAt line:1 char:6\r\n+ cat <<EOF\r\n+      ~\r\nThe '<' operator is reserved for future use.\r\n    + CategoryInfo          : ParserError: (:) [], ParentContainsErrorRecordException\r\n    + FullyQualifiedErrorId : MissingFileSpecification\r\n \r\n",
   "outcome": "exit-differs"
  },
  {
   "id": "exit-true",
   "category": "exitcode",
   "command": "true; echo $?",
   "expected_stdout": "0",
   "expected_exit": 0,
   "exit": 0,
   "stdout": "True\r\n",
   "stderr": "",
   "outcome": "output-differs"
  },
  {
   "id": "exit-false",
   "category": "exitcode",
   "command": "false; echo $?",
   "expected_stdout": "1",
   "expected_exit": 0,
   "exit": 0,
   "stdout": "False\r\n",
   "stderr": "",
   "outcome": "output-differs"
  },
  {
   "id": "exit-and",
   "category": "exitcode",
   "command": "true && echo yes",
   "expected_stdout": "yes",
   "expected_exit": 0,
   "exit": 1,
   "stdout": "",
   "stderr": "At line:1 char:6\r\n+ true && echo yes\r\n+      ~~\r\nThe token '&&' is not a valid statement separator in this version.\r\n    + CategoryInfo          : ParserError: (:) [], ParentContainsErrorRecordException\r\n    + FullyQualifiedErrorId : InvalidEndOfLine\r\n \r\n",
   "outcome": "exit-differs"
  },
  {
   "id": "exit-or",
   "category": "exitcode",
   "command": "false || echo fallback",
   "expected_stdout": "fallback",
   "expected_exit": 0,
   "exit": 1,
   "stdout": "",
   "stderr": "At line:1 char:7\r\n+ false || echo fallback\r\n+       ~~\r\nThe token '||' is not a valid statement separator in this version.\r\n    + CategoryInfo          : ParserError: (:) [], ParentContainsErrorRecordException\r\n    + FullyQualifiedErrorId : InvalidEndOfLine\r\n \r\n",
   "outcome": "exit-differs"
  },
  {
   "id": "exit-semicolon",
   "category": "exitcode",
   "command": "echo a; echo b",
   "expected_stdout": "a\nb",
   "expected_exit": 0,
   "exit": 0,
   "stdout": "a\r\nb\r\n",
   "stderr": "",
   "outcome": "crlf"
  },
  {
   "id": "exit-grep-nomatch",
   "category": "exitcode",
   "command": "echo abc | grep -q zzz; echo $?",
   "expected_stdout": "1",
   "expected_exit": 0,
   "exit": 0,
   "stdout": "False\r\n",
   "stderr": "",
   "outcome": "output-differs"
  },
  {
   "id": "exit-propagate",
   "category": "exitcode",
   "command": "false",
   "expected_stdout": "",
   "expected_exit": 1,
   "exit": 1,
   "stdout": "",
   "stderr": "",
   "outcome": "ok"
  },
  {
   "id": "exit-pipefail",
   "category": "exitcode",
   "command": "set -o pipefail; false | true; echo $?",
   "expected_stdout": "1",
   "expected_exit": 0,
   "exit": 0,
   "stdout": "False\r\n",
   "stderr": "Set-Variable : Cannot bind parameter 'Option'. Cannot convert value \"pipefail\" to type \r\n\"System.Management.Automation.ScopedItemOptions\". Error: \"Unable to match the identifier name pipefail to a valid \r\nenumerator name. Specify one of the following enumerator names and try again:\r\nNone, ReadOnly, Constant, Private, AllScope, Unspecified\"\r\nAt line:1 char:8\r\n+ set -o pipefail; false | true; echo $?\r\n+        ~~~~~~~~\r\n    + CategoryInfo          : InvalidArgument: (:) [Set-Variable], ParameterBindingException\r\n    + FullyQualifiedErrorId : CannotConvertArgumentNoMessage,Microsoft.PowerShell.Commands.SetVariableCommand\r\n \r\n",
   "outcome": "output-differs"
  },
  {
   "id": "txt-grep",
   "category": "text",
   "command": "printf \"a\\nb\\nc\\n\" > f; grep b f",
   "expected_stdout": "b",
   "expected_exit": 0,
   "exit": 0,
   "stdout": "Binary file f matches\n",
   "stderr": "",
   "outcome": "output-differs"
  },
  {
   "id": "txt-grep-n",
   "category": "text",
   "command": "printf \"a\\nb\\n\" > f; grep -n b f",
   "expected_stdout": "2:b",
   "expected_exit": 0,
   "exit": 0,
   "stdout": "Binary file f matches\n",
   "stderr": "",
   "outcome": "output-differs"
  },
  {
   "id": "txt-sed",
   "category": "text",
   "command": "echo foobar | sed \"s/foo/baz/\"",
   "expected_stdout": "bazbar",
   "expected_exit": 0,
   "exit": 0,
   "stdout": "bazbar\n",
   "stderr": "",
   "outcome": "ok"
  },
  {
   "id": "txt-sed-i",
   "category": "text",
   "command": "echo foo > f; sed -i \"s/foo/bar/\" f; cat f",
   "expected_stdout": "bar",
   "expected_exit": 0,
   "exit": 0,
   "stdout": "foo\r\n",
   "stderr": "",
   "outcome": "output-differs"
  },
  {
   "id": "txt-awk",
   "category": "text",
   "command": "echo \"a b c\" | awk \"{print \\$2}\"",
   "expected_stdout": "b",
   "expected_exit": 0,
   "exit": 1,
   "stdout": "",
   "stderr": "awk: cmd. line:1: {print \\}\nawk: cmd. line:1:        ^ backslash not last character on line\n",
   "outcome": "exit-differs"
  },
  {
   "id": "txt-cut",
   "category": "text",
   "command": "echo \"a:b:c\" | cut -d: -f2",
   "expected_stdout": "b",
   "expected_exit": 0,
   "exit": 0,
   "stdout": "b\n",
   "stderr": "",
   "outcome": "ok"
  },
  {
   "id": "txt-sort-uniq",
   "category": "text",
   "command": "printf \"b\\na\\nb\\n\" | sort | uniq",
   "expected_stdout": "a\nb",
   "expected_exit": 0,
   "exit": 0,
   "stdout": "a\r\nb\r\n",
   "stderr": "",
   "outcome": "crlf"
  },
  {
   "id": "txt-wc",
   "category": "text",
   "command": "printf \"a\\nb\\nc\\n\" | wc -l | tr -d \" \"",
   "expected_stdout": "3",
   "expected_exit": 0,
   "exit": 0,
   "stdout": "3\r\n",
   "stderr": "",
   "outcome": "ok"
  },
  {
   "id": "txt-head",
   "category": "text",
   "command": "printf \"1\\n2\\n3\\n\" | head -2",
   "expected_stdout": "1\n2",
   "expected_exit": 0,
   "exit": 0,
   "stdout": "1\r\n2\r\n",
   "stderr": "",
   "outcome": "crlf"
  },
  {
   "id": "txt-tail",
   "category": "text",
   "command": "printf \"1\\n2\\n3\\n\" | tail -1",
   "expected_stdout": "3",
   "expected_exit": 0,
   "exit": 0,
   "stdout": "3\r\n",
   "stderr": "",
   "outcome": "ok"
  },
  {
   "id": "txt-tr-delete",
   "category": "text",
   "command": "echo \"a1b2\" | tr -d \"0-9\"",
   "expected_stdout": "ab",
   "expected_exit": 0,
   "exit": 0,
   "stdout": "ab\r\n",
   "stderr": "",
   "outcome": "ok"
  },
  {
   "id": "txt-rev-sort-n",
   "category": "text",
   "command": "printf \"10\\n9\\n\" | sort -n",
   "expected_stdout": "9\n10",
   "expected_exit": 0,
   "exit": 1,
   "stdout": "",
   "stderr": "Sort-Object : A parameter cannot be found that matches parameter name 'n'.\r\nAt line:1 char:25\r\n+ printf \"10\\n9\\n\" | sort -n\r\n+                         ~~\r\n    + CategoryInfo          : InvalidArgument: (:) [Sort-Object], ParameterBindingException\r\n    + FullyQualifiedErrorId : NamedParameterNotFound,Microsoft.PowerShell.Commands.SortObjectCommand\r\n \r\n",
   "outcome": "exit-differs"
  },
  {
   "id": "var-subst",
   "category": "vars",
   "command": "X=$(echo hi); echo $X",
   "expected_stdout": "hi",
   "expected_exit": 0,
   "exit": 0,
   "stdout": "",
   "stderr": "X=$(echo hi) : The term 'X=$(echo hi)' is not recognized as the name of a cmdlet, function, script file, or operable \r\nprogram. Check the spelling of the name, or if a path was included, verify that the path is correct and try again.\r\nAt line:1 char:1\r\n+ X=$(echo hi); echo $X\r\n+ ~~~~~~~~~~~~\r\n    + CategoryInfo          : ObjectNotFound: (X=$(echo hi):String) [], CommandNotFoundException\r\n    + FullyQualifiedErrorId : CommandNotFoundException\r\n \r\n",
   "outcome": "not-found"
  },
  {
   "id": "var-backtick",
   "category": "vars",
   "command": "X=`echo hi`; echo $X",
   "expected_stdout": "hi",
   "expected_exit": 0,
   "exit": 1,
   "stdout": "",
   "stderr": "X=echo : The term 'X=echo' is not recognized as the name of a cmdlet, function, script file, or operable program. \r\nCheck the spelling of the name, or if a path was included, verify that the path is correct and try again.\r\nAt line:1 char:1\r\n+ X=`echo hi`; echo $X\r\n+ ~~~~~~~\r\n    + CategoryInfo          : ObjectNotFound: (X=echo:String) [], CommandNotFoundException\r\n    + FullyQualifiedErrorId : CommandNotFoundException\r\n \r\n",
   "outcome": "not-found"
  },
  {
   "id": "var-inline-env",
   "category": "vars",
   "command": "FOO=bar sh -c 'echo $FOO'",
   "expected_stdout": "bar",
   "expected_exit": 0,
   "exit": 1,
   "stdout": "",
   "stderr": "FOO=bar : The term 'FOO=bar' is not recognized as the name of a cmdlet, function, script file, or operable program. \r\nCheck the spelling of the name, or if a path was included, verify that the path is correct and try again.\r\nAt line:1 char:1\r\n+ FOO=bar sh -c 'echo $FOO'\r\n+ ~~~~~~~\r\n    + CategoryInfo          : ObjectNotFound: (FOO=bar:String) [], CommandNotFoundException\r\n    + FullyQualifiedErrorId : CommandNotFoundException\r\n \r\n",
   "outcome": "not-found"
  },
  {
   "id": "var-export",
   "category": "vars",
   "command": "export FOO=bar; echo $FOO",
   "expected_stdout": "bar",
   "expected_exit": 0,
   "exit": 0,
   "stdout": "",
   "stderr": "export : The term 'export' is not recognized as the name of a cmdlet, function, script file, or operable program. \r\nCheck the spelling of the name, or if a path was included, verify that the path is correct and try again.\r\nAt line:1 char:1\r\n+ export FOO=bar; echo $FOO\r\n+ ~~~~~~\r\n    + CategoryInfo          : ObjectNotFound: (export:String) [], CommandNotFoundException\r\n    + FullyQualifiedErrorId : CommandNotFoundException\r\n \r\n",
   "outcome": "not-found"
  },
  {
   "id": "var-default",
   "category": "vars",
   "command": "echo ${UNSET_VAR_XYZ:-fallback}",
   "expected_stdout": "fallback",
   "expected_exit": 0,
   "exit": 0,
   "stdout": "",
   "stderr": "",
   "outcome": "output-differs"
  },
  {
   "id": "var-arith",
   "category": "vars",
   "command": "echo $((2 + 3))",
   "expected_stdout": "5",
   "expected_exit": 0,
   "exit": 0,
   "stdout": "5\r\n",
   "stderr": "",
   "outcome": "ok"
  },
  {
   "id": "quote-single",
   "category": "quoting",
   "command": "echo 'a b'",
   "expected_stdout": "a b",
   "expected_exit": 0,
   "exit": 0,
   "stdout": "a b\r\n",
   "stderr": "",
   "outcome": "ok"
  },
  {
   "id": "quote-double",
   "category": "quoting",
   "command": "echo \"a b\"",
   "expected_stdout": "a b",
   "expected_exit": 0,
   "exit": 0,
   "stdout": "a b\r\n",
   "stderr": "",
   "outcome": "ok"
  },
  {
   "id": "quote-nested",
   "category": "quoting",
   "command": "echo \"outer 'inner' end\"",
   "expected_stdout": "outer 'inner' end",
   "expected_exit": 0,
   "exit": 0,
   "stdout": "outer 'inner' end\r\n",
   "stderr": "",
   "outcome": "ok"
  },
  {
   "id": "quote-dollar-literal",
   "category": "quoting",
   "command": "echo 'costs $5'",
   "expected_stdout": "costs $5",
   "expected_exit": 0,
   "exit": 0,
   "stdout": "costs $5\r\n",
   "stderr": "",
   "outcome": "ok"
  },
  {
   "id": "quote-backslash",
   "category": "quoting",
   "command": "printf \"a\\tb\\n\"",
   "expected_stdout": "a\tb",
   "expected_exit": 0,
   "exit": 0,
   "stdout": "a\tb\n",
   "stderr": "",
   "outcome": "ok"
  },
  {
   "id": "quote-glob-literal",
   "category": "quoting",
   "command": "echo \"*\"",
   "expected_stdout": "*",
   "expected_exit": 0,
   "exit": 0,
   "stdout": "*\r\n",
   "stderr": "",
   "outcome": "ok"
  },
  {
   "id": "path-mkdir-p",
   "category": "paths",
   "command": "mkdir -p a/b/c && echo ok",
   "expected_stdout": "ok",
   "expected_exit": 0,
   "exit": 1,
   "stdout": "",
   "stderr": "At line:1 char:16\r\n+ mkdir -p a/b/c && echo ok\r\n+                ~~\r\nThe token '&&' is not a valid statement separator in this version.\r\n    + CategoryInfo          : ParserError: (:) [], ParentContainsErrorRecordException\r\n    + FullyQualifiedErrorId : InvalidEndOfLine\r\n \r\n",
   "outcome": "exit-differs"
  },
  {
   "id": "path-nested-write",
   "category": "paths",
   "command": "mkdir -p x/y && echo v > x/y/f && cat x/y/f",
   "expected_stdout": "v",
   "expected_exit": 0,
   "exit": 1,
   "stdout": "",
   "stderr": "At line:1 char:14\r\n+ mkdir -p x/y && echo v > x/y/f && cat x/y/f\r\n+              ~~\r\nThe token '&&' is not a valid statement separator in this version.\r\nAt line:1 char:32\r\n+ mkdir -p x/y && echo v > x/y/f && cat x/y/f\r\n+                                ~~\r\nThe token '&&' is not a valid statement separator in this version.\r\n    + CategoryInfo          : ParserError: (:) [], ParentContainsErrorRecordException\r\n    + FullyQualifiedErrorId : InvalidEndOfLine\r\n \r\n",
   "outcome": "exit-differs"
  },
  {
   "id": "path-spaces",
   "category": "paths",
   "command": "mkdir -p \"dir with spaces\" && echo v > \"dir with spaces/f\" && cat \"dir with spaces/f\"",
   "expected_stdout": "v",
   "expected_exit": 0,
   "exit": 1,
   "stdout": "",
   "stderr": "At line:1 char:28\r\n+ mkdir -p \"dir with spaces\" && echo v > \"dir with spaces/f\" && cat \"di ...\r\n+                            ~~\r\nThe token '&&' is not a valid statement separator in this version.\r\nAt line:1 char:60\r\n+ mkdir -p \"dir with spaces\" && echo v > \"dir with spaces/f\" && cat \"di ...\r\n+                                                            ~~\r\nThe token '&&' is not a valid statement separator in this version.\r\n    + CategoryInfo          : ParserError: (:) [], ParentContainsErrorRecordException\r\n    + FullyQualifiedErrorId : InvalidEndOfLine\r\n \r\n",
   "outcome": "exit-differs"
  },
  {
   "id": "path-unicode",
   "category": "paths",
   "command": "mkdir -p \"\u03b5\u03bb\u03bb\u03b7\u03bd\u03b9\u03ba\u03ac\" && echo v > \"\u03b5\u03bb\u03bb\u03b7\u03bd\u03b9\u03ba\u03ac/f\" && cat \"\u03b5\u03bb\u03bb\u03b7\u03bd\u03b9\u03ba\u03ac/f\"",
   "expected_stdout": "v",
   "expected_exit": 0,
   "exit": 1,
   "stdout": "",
   "stderr": "At line:1 char:21\r\n+ mkdir -p \"\ufffd???????\" && echo v > \"\ufffd???????/f\" && cat \"\ufffd???????/f\"\r\n+                     ~~\r\nThe token '&&' is not a valid statement separator in this version.\r\nAt line:1 char:46\r\n+ mkdir -p \"\ufffd???????\" && echo v > \"\ufffd???????/f\" && cat \"\ufffd???????/f\"\r\n+                                              ~~\r\nThe token '&&' is not a valid statement separator in this version.\r\n    + CategoryInfo          : ParserError: (:) [], ParentContainsErrorRecordException\r\n    + FullyQualifiedErrorId : InvalidEndOfLine\r\n \r\n",
   "outcome": "exit-differs"
  },
  {
   "id": "path-relative-up",
   "category": "paths",
   "command": "mkdir -p p/q && cd p/q && cat ../../marker",
   "expected_stdout": "MARK",
   "expected_exit": 0,
   "exit": 1,
   "stdout": "",
   "stderr": "At line:1 char:14\r\n+ mkdir -p p/q && cd p/q && cat ../../marker\r\n+              ~~\r\nThe token '&&' is not a valid statement separator in this version.\r\nAt line:1 char:24\r\n+ mkdir -p p/q && cd p/q && cat ../../marker\r\n+                        ~~\r\nThe token '&&' is not a valid statement separator in this version.\r\n    + CategoryInfo          : ParserError: (:) [], ParentContainsErrorRecordException\r\n    + FullyQualifiedErrorId : InvalidEndOfLine\r\n \r\n",
   "outcome": "exit-differs"
  },
  {
   "id": "path-basename",
   "category": "paths",
   "command": "basename /a/b/c.txt",
   "expected_stdout": "c.txt",
   "expected_exit": 0,
   "exit": 0,
   "stdout": "c.txt\n",
   "stderr": "",
   "outcome": "ok"
  },
  {
   "id": "path-dirname",
   "category": "paths",
   "command": "dirname /a/b/c.txt",
   "expected_stdout": "/a/b",
   "expected_exit": 0,
   "exit": 0,
   "stdout": "/a/b\n",
   "stderr": "",
   "outcome": "ok"
  },
  {
   "id": "path-trailing-slash",
   "category": "paths",
   "command": "mkdir -p t && ls -d t/ | tr -d \"/\"",
   "expected_stdout": "t",
   "expected_exit": 0,
   "exit": 1,
   "stdout": "",
   "stderr": "At line:1 char:12\r\n+ mkdir -p t && ls -d t/ | tr -d \"/\"\r\n+            ~~\r\nThe token '&&' is not a valid statement separator in this version.\r\n    + CategoryInfo          : ParserError: (:) [], ParentContainsErrorRecordException\r\n    + FullyQualifiedErrorId : InvalidEndOfLine\r\n \r\n",
   "outcome": "exit-differs"
  },
  {
   "id": "case-two-files",
   "category": "case",
   "command": "echo one > Alpha.txt; echo two > alpha.txt; ls | grep -ci alpha | tr -d \" \"",
   "expected_stdout": "2",
   "expected_exit": 0,
   "exit": 0,
   "stdout": "1\r\n",
   "stderr": "",
   "outcome": "output-differs"
  },
  {
   "id": "case-distinct-content",
   "category": "case",
   "command": "echo one > Beta.txt; echo two > beta.txt; cat Beta.txt",
   "expected_stdout": "one",
   "expected_exit": 0,
   "exit": 0,
   "stdout": "two\r\n",
   "stderr": "",
   "outcome": "output-differs"
  },
  {
   "id": "case-grep-sensitive",
   "category": "case",
   "command": "echo Hello > f; grep -c hello f | tr -d \" \"",
   "expected_stdout": "0",
   "expected_exit": 0,
   "exit": 1,
   "stdout": "0\r\n",
   "stderr": "",
   "outcome": "exit-differs"
  },
  {
   "id": "glob-star",
   "category": "glob",
   "command": "touch g1.txt g2.txt; ls *.txt | sort",
   "expected_stdout": "g1.txt\ng2.txt",
   "expected_exit": 0,
   "exit": 0,
   "stdout": "\r\n\r\n    Directory: C:\\TEMP\\probe08_jdk0zekx\\glob-star\r\n\r\n\r\nMode                 LastWriteTime         Length Name                                                                 \r\n----                 -------------         ------ ----                                                                 \r\n-a----         28-Sep-26     16:37              0 g1.txt                                                               \r\n-a----         28-Sep-26     16:37              0 g2.txt                                                               \r\n\r\n\r\n",
   "stderr": "",
   "outcome": "output-differs"
  },
  {
   "id": "glob-in-for",
   "category": "glob",
   "command": "touch h1.md h2.md; for f in *.md; do echo $f; done | sort",
   "expected_stdout": "h1.md\nh2.md",
   "expected_exit": 0,
   "exit": 1,
   "stdout": "",
   "stderr": "At line:1 char:23\r\n+ touch h1.md h2.md; for f in *.md; do echo $f; done | sort\r\n+                       ~\r\nMissing opening '(' after keyword 'for'.\r\nAt line:1 char:37\r\n+ touch h1.md h2.md; for f in *.md; do echo $f; done | sort\r\n+                                     ~\r\nMissing statement body in do loop.\r\n    + CategoryInfo          : ParserError: (:) [], ParentContainsErrorRecordException\r\n    + FullyQualifiedErrorId : MissingOpenParenthesisAfterKeyword\r\n \r\n",
   "outcome": "exit-differs"
  },
  {
   "id": "glob-no-match",
   "category": "glob",
   "command": "ls *.nonexistentext 2>/dev/null; echo done",
   "expected_stdout": "done",
   "expected_exit": 0,
   "exit": 0,
   "stdout": "done\r\n",
   "stderr": "out-file : Could not find a part of the path 'C:\\dev\\null'.\r\nAt line:1 char:1\r\n+ ls *.nonexistentext 2>/dev/null; echo done\r\n+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\r\n    + CategoryInfo          : OpenError: (:) [Out-File], DirectoryNotFoundException\r\n    + FullyQualifiedErrorId : FileOpenFailure,Microsoft.PowerShell.Commands.OutFileCommand\r\n \r\n",
   "outcome": "ok"
  },
  {
   "id": "find-name",
   "category": "find",
   "command": "mkdir -p d && touch d/a.py d/b.py && find d -name \"*.py\" | sort",
   "expected_stdout": "d/a.py\nd/b.py",
   "expected_exit": 0,
   "exit": 1,
   "stdout": "",
   "stderr": "At line:1 char:12\r\n+ mkdir -p d && touch d/a.py d/b.py && find d -name \"*.py\" | sort\r\n+            ~~\r\nThe token '&&' is not a valid statement separator in this version.\r\nAt line:1 char:35\r\n+ mkdir -p d && touch d/a.py d/b.py && find d -name \"*.py\" | sort\r\n+                                   ~~\r\nThe token '&&' is not a valid statement separator in this version.\r\n    + CategoryInfo          : ParserError: (:) [], ParentContainsErrorRecordException\r\n    + FullyQualifiedErrorId : InvalidEndOfLine\r\n \r\n",
   "outcome": "exit-differs"
  },
  {
   "id": "find-type-f",
   "category": "find",
   "command": "mkdir -p e/sub && touch e/f1 && find e -type f",
   "expected_stdout": "e/f1",
   "expected_exit": 0,
   "exit": 1,
   "stdout": "",
   "stderr": "At line:1 char:16\r\n+ mkdir -p e/sub && touch e/f1 && find e -type f\r\n+                ~~\r\nThe token '&&' is not a valid statement separator in this version.\r\nAt line:1 char:30\r\n+ mkdir -p e/sub && touch e/f1 && find e -type f\r\n+                              ~~\r\nThe token '&&' is not a valid statement separator in this version.\r\n    + CategoryInfo          : ParserError: (:) [], ParentContainsErrorRecordException\r\n    + FullyQualifiedErrorId : InvalidEndOfLine\r\n \r\n",
   "outcome": "exit-differs"
  },
  {
   "id": "find-exec",
   "category": "find",
   "command": "mkdir -p k && touch k/z.txt && find k -name \"*.txt\" -exec basename {} \\;",
   "expected_stdout": "z.txt",
   "expected_exit": 0,
   "exit": 1,
   "stdout": "",
   "stderr": "At line:1 char:12\r\n+ mkdir -p k && touch k/z.txt && find k -name \"*.txt\" -exec basename {} ...\r\n+            ~~\r\nThe token '&&' is not a valid statement separator in this version.\r\nAt line:1 char:29\r\n+ mkdir -p k && touch k/z.txt && find k -name \"*.txt\" -exec basename {} ...\r\n+                             ~~\r\nThe token '&&' is not a valid statement separator in this version.\r\n    + CategoryInfo          : ParserError: (:) [], ParentContainsErrorRecordException\r\n    + FullyQualifiedErrorId : InvalidEndOfLine\r\n \r\n",
   "outcome": "exit-differs"
  },
  {
   "id": "xargs-basic",
   "category": "find",
   "command": "printf \"a\\nb\\n\" | xargs echo",
   "expected_stdout": "a b",
   "expected_exit": 0,
   "exit": 0,
   "stdout": "a\r b\r\n",
   "stderr": "",
   "outcome": "output-differs"
  },
  {
   "id": "xargs-null",
   "category": "find",
   "command": "mkdir -p n && touch \"n/a b.txt\" && find n -type f -print0 | xargs -0 basename",
   "expected_stdout": "a b.txt",
   "expected_exit": 0,
   "exit": 1,
   "stdout": "",
   "stderr": "At line:1 char:12\r\n+ mkdir -p n && touch \"n/a b.txt\" && find n -type f -print0 | xargs -0  ...\r\n+            ~~\r\nThe token '&&' is not a valid statement separator in this version.\r\nAt line:1 char:33\r\n+ mkdir -p n && touch \"n/a b.txt\" && find n -type f -print0 | xargs -0  ...\r\n+                                 ~~\r\nThe token '&&' is not a valid statement separator in this version.\r\n    + CategoryInfo          : ParserError: (:) [], ParentContainsErrorRecordException\r\n    + FullyQualifiedErrorId : InvalidEndOfLine\r\n \r\n",
   "outcome": "exit-differs"
  },
  {
   "id": "eol-printf-lf",
   "category": "eol",
   "command": "printf \"a\\nb\\n\" > f; wc -c < f | tr -d \" \"",
   "expected_stdout": "4",
   "expected_exit": 0,
   "exit": 1,
   "stdout": "",
   "stderr": "At line:1 char:28\r\n+ printf \"a\\nb\\n\" > f; wc -c < f | tr -d \" \"\r\n+                            ~\r\nThe '<' operator is reserved for future use.\r\n    + CategoryInfo          : ParserError: (:) [], ParentContainsErrorRecordException\r\n    + FullyQualifiedErrorId : RedirectionNotSupported\r\n \r\n",
   "outcome": "exit-differs"
  },
  {
   "id": "eol-echo-roundtrip",
   "category": "eol",
   "command": "echo abc > f; cat f",
   "expected_stdout": "abc",
   "expected_exit": 0,
   "exit": 0,
   "stdout": "abc\r\n",
   "stderr": "",
   "outcome": "ok"
  },
  {
   "id": "eol-echo-bytes",
   "category": "eol",
   "command": "echo abc | wc -c | tr -d \" \"",
   "expected_stdout": "4",
   "expected_exit": 0,
   "exit": 0,
   "stdout": "5\r\n",
   "stderr": "",
   "outcome": "output-differs"
  },
  {
   "id": "tool-git",
   "category": "tools",
   "command": "git --version > /dev/null && echo present",
   "expected_stdout": "present",
   "expected_exit": 0,
   "exit": 1,
   "stdout": "",
   "stderr": "At line:1 char:27\r\n+ git --version > /dev/null && echo present\r\n+                           ~~\r\nThe token '&&' is not a valid statement separator in this version.\r\n    + CategoryInfo          : ParserError: (:) [], ParentContainsErrorRecordException\r\n    + FullyQualifiedErrorId : InvalidEndOfLine\r\n \r\n",
   "outcome": "exit-differs"
  },
  {
   "id": "tool-python",
   "category": "tools",
   "command": "python3 -c \"print(1)\" 2>/dev/null || python -c \"print(1)\"",
   "expected_stdout": "1",
   "expected_exit": 0,
   "exit": 1,
   "stdout": "",
   "stderr": "At line:1 char:35\r\n+ python3 -c \"print(1)\" 2>/dev/null || python -c \"print(1)\"\r\n+                                   ~~\r\nThe token '||' is not a valid statement separator in this version.\r\n    + CategoryInfo          : ParserError: (:) [], ParentContainsErrorRecordException\r\n    + FullyQualifiedErrorId : InvalidEndOfLine\r\n \r\n",
   "outcome": "exit-differs"
  },
  {
   "id": "tool-curl",
   "category": "tools",
   "command": "curl --version > /dev/null 2>&1 && echo present",
   "expected_stdout": "present",
   "expected_exit": 0,
   "exit": 1,
   "stdout": "",
   "stderr": "At line:1 char:33\r\n+ curl --version > /dev/null 2>&1 && echo present\r\n+                                 ~~\r\nThe token '&&' is not a valid statement separator in this version.\r\n    + CategoryInfo          : ParserError: (:) [], ParentContainsErrorRecordException\r\n    + FullyQualifiedErrorId : InvalidEndOfLine\r\n \r\n",
   "outcome": "exit-differs"
  },
  {
   "id": "tool-tar",
   "category": "tools",
   "command": "tar --version > /dev/null 2>&1 && echo present",
   "expected_stdout": "present",
   "expected_exit": 0,
   "exit": 1,
   "stdout": "",
   "stderr": "At line:1 char:32\r\n+ tar --version > /dev/null 2>&1 && echo present\r\n+                                ~~\r\nThe token '&&' is not a valid statement separator in this version.\r\n    + CategoryInfo          : ParserError: (:) [], ParentContainsErrorRecordException\r\n    + FullyQualifiedErrorId : InvalidEndOfLine\r\n \r\n",
   "outcome": "exit-differs"
  },
  {
   "id": "tool-diff",
   "category": "tools",
   "command": "echo a > f1; echo a > f2; diff f1 f2 && echo same",
   "expected_stdout": "same",
   "expected_exit": 0,
   "exit": 1,
   "stdout": "",
   "stderr": "At line:1 char:38\r\n+ echo a > f1; echo a > f2; diff f1 f2 && echo same\r\n+                                      ~~\r\nThe token '&&' is not a valid statement separator in this version.\r\n    + CategoryInfo          : ParserError: (:) [], ParentContainsErrorRecordException\r\n    + FullyQualifiedErrorId : InvalidEndOfLine\r\n \r\n",
   "outcome": "exit-differs"
  },
  {
   "id": "tool-realpath",
   "category": "tools",
   "command": "realpath . > /dev/null && echo present",
   "expected_stdout": "present",
   "expected_exit": 0,
   "exit": 1,
   "stdout": "",
   "stderr": "At line:1 char:24\r\n+ realpath . > /dev/null && echo present\r\n+                        ~~\r\nThe token '&&' is not a valid statement separator in this version.\r\n    + CategoryInfo          : ParserError: (:) [], ParentContainsErrorRecordException\r\n    + FullyQualifiedErrorId : InvalidEndOfLine\r\n \r\n",
   "outcome": "exit-differs"
  },
  {
   "id": "tool-stat",
   "category": "tools",
   "command": "touch f; stat -c %s f 2>/dev/null || stat -f %z f",
   "expected_stdout": "0",
   "expected_exit": 0,
   "exit": 1,
   "stdout": "",
   "stderr": "At line:1 char:35\r\n+ touch f; stat -c %s f 2>/dev/null || stat -f %z f\r\n+                                   ~~\r\nThe token '||' is not a valid statement separator in this version.\r\n    + CategoryInfo          : ParserError: (:) [], ParentContainsErrorRecordException\r\n    + FullyQualifiedErrorId : InvalidEndOfLine\r\n \r\n",
   "outcome": "exit-differs"
  },
  {
   "id": "tool-du",
   "category": "tools",
   "command": "du -h . > /dev/null && echo present",
   "expected_stdout": "present",
   "expected_exit": 0,
   "exit": 1,
   "stdout": "",
   "stderr": "At line:1 char:21\r\n+ du -h . > /dev/null && echo present\r\n+                     ~~\r\nThe token '&&' is not a valid statement separator in this version.\r\n    + CategoryInfo          : ParserError: (:) [], ParentContainsErrorRecordException\r\n    + FullyQualifiedErrorId : InvalidEndOfLine\r\n \r\n",
   "outcome": "exit-differs"
  },
  {
   "id": "tool-which",
   "category": "tools",
   "command": "which echo > /dev/null && echo present",
   "expected_stdout": "present",
   "expected_exit": 0,
   "exit": 1,
   "stdout": "",
   "stderr": "At line:1 char:24\r\n+ which echo > /dev/null && echo present\r\n+                        ~~\r\nThe token '&&' is not a valid statement separator in this version.\r\n    + CategoryInfo          : ParserError: (:) [], ParentContainsErrorRecordException\r\n    + FullyQualifiedErrorId : InvalidEndOfLine\r\n \r\n",
   "outcome": "exit-differs"
  },
  {
   "id": "coh-write-read",
   "category": "coherence",
   "command": "echo v > f && cat f",
   "expected_stdout": "v",
   "expected_exit": 0,
   "exit": 1,
   "stdout": "",
   "stderr": "At line:1 char:12\r\n+ echo v > f && cat f\r\n+            ~~\r\nThe token '&&' is not a valid statement separator in this version.\r\n    + CategoryInfo          : ParserError: (:) [], ParentContainsErrorRecordException\r\n    + FullyQualifiedErrorId : InvalidEndOfLine\r\n \r\n",
   "outcome": "exit-differs"
  },
  {
   "id": "coh-write-stat",
   "category": "coherence",
   "command": "echo abcd > f && wc -c < f | tr -d \" \"",
   "expected_stdout": "5",
   "expected_exit": 0,
   "exit": 1,
   "stdout": "",
   "stderr": "At line:1 char:15\r\n+ echo abcd > f && wc -c < f | tr -d \" \"\r\n+               ~~\r\nThe token '&&' is not a valid statement separator in this version.\r\nAt line:1 char:24\r\n+ echo abcd > f && wc -c < f | tr -d \" \"\r\n+                        ~\r\nThe '<' operator is reserved for future use.\r\n    + CategoryInfo          : ParserError: (:) [], ParentContainsErrorRecordException\r\n    + FullyQualifiedErrorId : InvalidEndOfLine\r\n \r\n",
   "outcome": "exit-differs"
  },
  {
   "id": "coh-write-find",
   "category": "coherence",
   "command": "touch fresh.txt && find . -name \"fresh.txt\" | head -1",
   "expected_stdout": "./fresh.txt",
   "expected_exit": 0,
   "exit": 1,
   "stdout": "",
   "stderr": "At line:1 char:17\r\n+ touch fresh.txt && find . -name \"fresh.txt\" | head -1\r\n+                 ~~\r\nThe token '&&' is not a valid statement separator in this version.\r\n    + CategoryInfo          : ParserError: (:) [], ParentContainsErrorRecordException\r\n    + FullyQualifiedErrorId : InvalidEndOfLine\r\n \r\n",
   "outcome": "exit-differs"
  },
  {
   "id": "coh-append-read",
   "category": "coherence",
   "command": "echo a > f; echo b >> f; tail -1 f",
   "expected_stdout": "b",
   "expected_exit": 0,
   "exit": 0,
   "stdout": "\u0000",
   "stderr": "",
   "outcome": "output-differs"
  },
  {
   "id": "coh-delete-gone",
   "category": "coherence",
   "command": "touch gone.txt && rm gone.txt && ls gone.txt 2>/dev/null; echo checked",
   "expected_stdout": "checked",
   "expected_exit": 0,
   "exit": 1,
   "stdout": "",
   "stderr": "At line:1 char:16\r\n+ touch gone.txt && rm gone.txt && ls gone.txt 2>/dev/null; echo checke ...\r\n+                ~~\r\nThe token '&&' is not a valid statement separator in this version.\r\nAt line:1 char:31\r\n+ touch gone.txt && rm gone.txt && ls gone.txt 2>/dev/null; echo checke ...\r\n+                               ~~\r\nThe token '&&' is not a valid statement separator in this version.\r\n    + CategoryInfo          : ParserError: (:) [], ParentContainsErrorRecordException\r\n    + FullyQualifiedErrorId : InvalidEndOfLine\r\n \r\n",
   "outcome": "exit-differs"
  },
  {
   "id": "coh-mv-visible",
   "category": "coherence",
   "command": "echo v > src && mv src dst && cat dst",
   "expected_stdout": "v",
   "expected_exit": 0,
   "exit": 1,
   "stdout": "",
   "stderr": "At line:1 char:14\r\n+ echo v > src && mv src dst && cat dst\r\n+              ~~\r\nThe token '&&' is not a valid statement separator in this version.\r\nAt line:1 char:28\r\n+ echo v > src && mv src dst && cat dst\r\n+                            ~~\r\nThe token '&&' is not a valid statement separator in this version.\r\n    + CategoryInfo          : ParserError: (:) [], ParentContainsErrorRecordException\r\n    + FullyQualifiedErrorId : InvalidEndOfLine\r\n \r\n",
   "outcome": "exit-differs"
  },
  {
   "id": "coh-subshell-sees",
   "category": "coherence",
   "command": "echo v > f && sh -c \"cat f\"",
   "expected_stdout": "v",
   "expected_exit": 0,
   "exit": 1,
   "stdout": "",
   "stderr": "At line:1 char:12\r\n+ echo v > f && sh -c \"cat f\"\r\n+            ~~\r\nThe token '&&' is not a valid statement separator in this version.\r\n    + CategoryInfo          : ParserError: (:) [], ParentContainsErrorRecordException\r\n    + FullyQualifiedErrorId : InvalidEndOfLine\r\n \r\n",
   "outcome": "exit-differs"
  }
 ]
}
