{
 "arm": "W-ps7",
 "shell": "C:/Users/USER/tools/pwsh7/pwsh.exe -NoProfile -Command",
 "when": "2026-09-28T16:41:14",
 "host": "BLACK-5800G",
 "n": 76,
 "counts": {
  "ok": 34,
  "exit-differs": 17,
  "crlf": 3,
  "output-differs": 18,
  "not-found": 4
 },
 "survival_pct": 44.7,
 "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": "\u001b[31;1mOut-File: \u001b[31;1mCould not find a part of the path 'C:\\dev\\null'.\u001b[0m\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": "\u001b[31;1mOut-File: \u001b[31;1mCould not find a part of the path 'C:\\dev\\null'.\u001b[0m\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": "\u001b[31;1mParserError: \u001b[0m\r\n\u001b[31;1m\u001b[36;1mLine |\u001b[0m\r\n\u001b[31;1m\u001b[36;1m\u001b[36;1m   1 | \u001b[0m echo out; echo err \u001b[36;1m1>&2\u001b[0m\r\n\u001b[31;1m\u001b[36;1m\u001b[36;1m\u001b[0m\u001b[36;1m\u001b[0m\u001b[36;1m     | \u001b[31;1m                    ~~~~\u001b[0m\r\n\u001b[31;1m\u001b[36;1m\u001b[36;1m\u001b[0m\u001b[36;1m\u001b[0m\u001b[36;1m\u001b[31;1m\u001b[31;1m\u001b[36;1m     | \u001b[31;1mThe '1>&2' operator is reserved for future use.\u001b[0m\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": "\u001b[31;1mParserError: \u001b[0m\r\n\u001b[31;1m\u001b[36;1mLine |\u001b[0m\r\n\u001b[31;1m\u001b[36;1m\u001b[36;1m   1 | \u001b[0m cat <\u001b[36;1m<\u001b[0mEOF\u001b[0m\r\n\u001b[31;1m\u001b[36;1m\u001b[36;1m\u001b[0m\u001b[36;1m\u001b[0m\u001b[36;1m     | \u001b[31;1m      ~\u001b[0m\r\n\u001b[31;1m\u001b[36;1m\u001b[36;1m\u001b[0m\u001b[36;1m\u001b[0m\u001b[36;1m\u001b[31;1m\u001b[31;1m\u001b[36;1m     | \u001b[31;1mMissing file specification after redirection operator.\u001b[0m\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": 0,
   "stdout": "yes\r\n",
   "stderr": "",
   "outcome": "ok"
  },
  {
   "id": "exit-or",
   "category": "exitcode",
   "command": "false || echo fallback",
   "expected_stdout": "fallback",
   "expected_exit": 0,
   "exit": 0,
   "stdout": "fallback\r\n",
   "stderr": "",
   "outcome": "ok"
  },
  {
   "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": "\u001b[31;1mSet-Variable: \u001b[31;1mCannot bind parameter 'Option'. Cannot convert value \"pipefail\" to type \"System.Management.Automation.ScopedItemOptions\". Error: \"Unable to match the identifier name pipefail to a valid enumerator name. Specify one of the following enumerator names and try again:\u001b[0m\r\n\u001b[31;1m\u001b[31;1mNone, ReadOnly, Constant, Private, AllScope, Unspecified\"\u001b[0m\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": "b\n",
   "stderr": "",
   "outcome": "ok"
  },
  {
   "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": "2:b\n",
   "stderr": "",
   "outcome": "ok"
  },
  {
   "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": "bar\r\n",
   "stderr": "",
   "outcome": "ok"
  },
  {
   "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\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\n2\n",
   "stderr": "",
   "outcome": "ok"
  },
  {
   "id": "txt-tail",
   "category": "text",
   "command": "printf \"1\\n2\\n3\\n\" | tail -1",
   "expected_stdout": "3",
   "expected_exit": 0,
   "exit": 0,
   "stdout": "3\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": "\u001b[31;1mSort-Object: \u001b[31;1mA parameter cannot be found that matches parameter name 'n'.\u001b[0m\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": "\u001b[31;1mX=$(echo hi): \u001b[31;1mThe term 'X=$(echo hi)' is not recognized as a name of a cmdlet, function, script file, or executable program.\u001b[0m\r\n\u001b[31;1m\u001b[31;1mCheck the spelling of the name, or if a path was included, verify that the path is correct and try again.\u001b[0m\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": "\u001b[31;1mX=\u001bcho: \u001b[31;1mThe term 'X=\u001bcho' is not recognized as a name of a cmdlet, function, script file, or executable program.\u001b[0m\r\n\u001b[31;1m\u001b[31;1mCheck the spelling of the name, or if a path was included, verify that the path is correct and try again.\u001b[0m\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": "\u001b[31;1mFOO=bar: \u001b[31;1mThe term 'FOO=bar' is not recognized as a name of a cmdlet, function, script file, or executable program.\u001b[0m\r\n\u001b[31;1m\u001b[31;1mCheck the spelling of the name, or if a path was included, verify that the path is correct and try again.\u001b[0m\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": "\u001b[31;1mexport: \u001b[31;1mThe term 'export' is not recognized as a name of a cmdlet, function, script file, or executable program.\u001b[0m\r\n\u001b[31;1m\u001b[31;1mCheck the spelling of the name, or if a path was included, verify that the path is correct and try again.\u001b[0m\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": 0,
   "stdout": "\r\n    Directory: C:\\TEMP\\probe08_rotjqkr_\\path-mkdir-p\\a\\b\r\n\r\n\u001b[32;1mMode   \u001b[0m\u001b[32;1m              LastWriteTime\u001b[0m \u001b[32;1;3m        Length\u001b[0m\u001b[32;1m Name\u001b[0m\r\n\u001b[32;1m----   \u001b[0m \u001b[32;1m             -------------\u001b[0m \u001b[32;1m        ------\u001b[0m \u001b[32;1m----\u001b[0m\r\nd----           28-Sep-26    16:40                \u001b[44;1mc\u001b[0m\r\nok\r\n\r\n",
   "stderr": "",
   "outcome": "output-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": 0,
   "stdout": "\r\n    Directory: C:\\TEMP\\probe08_rotjqkr_\\path-nested-write\\x\r\n\r\n\u001b[32;1mMode   \u001b[0m\u001b[32;1m              LastWriteTime\u001b[0m \u001b[32;1;3m        Length\u001b[0m\u001b[32;1m Name\u001b[0m\r\n\u001b[32;1m----   \u001b[0m \u001b[32;1m             -------------\u001b[0m \u001b[32;1m        ------\u001b[0m \u001b[32;1m----\u001b[0m\r\nd----           28-Sep-26    16:40                \u001b[44;1my\u001b[0m\r\nv\r\n\r\n",
   "stderr": "",
   "outcome": "output-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": 0,
   "stdout": "\r\n    Directory: C:\\TEMP\\probe08_rotjqkr_\\path-spaces\r\n\r\n\u001b[32;1mMode   \u001b[0m\u001b[32;1m              LastWriteTime\u001b[0m \u001b[32;1;3m        Length\u001b[0m\u001b[32;1m Name\u001b[0m\r\n\u001b[32;1m----   \u001b[0m \u001b[32;1m             -------------\u001b[0m \u001b[32;1m        ------\u001b[0m \u001b[32;1m----\u001b[0m\r\nd----           28-Sep-26    16:41                \u001b[44;1mdir with spaces\u001b[0m\r\nv\r\n\r\n",
   "stderr": "",
   "outcome": "output-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": 0,
   "stdout": "\r\n    Directory: C:\\TEMP\\probe08_rotjqkr_\\path-unicode\r\n\r\n\u001b[32;1mMode   \u001b[0m\u001b[32;1m              LastWriteTime\u001b[0m \u001b[32;1;3m        Length\u001b[0m\u001b[32;1m Name\u001b[0m\r\n\u001b[32;1m----   \u001b[0m \u001b[32;1m             -------------\u001b[0m \u001b[32;1m        ------\u001b[0m \u001b[32;1m----\u001b[0m\r\nd----           28-Sep-26    16:41                \u001b[44;1m\ufffd???????\u001b[0m\r\nv\r\n\r\n",
   "stderr": "",
   "outcome": "output-differs"
  },
  {
   "id": "path-relative-up",
   "category": "paths",
   "command": "mkdir -p p/q && cd p/q && cat ../../marker",
   "expected_stdout": "MARK",
   "expected_exit": 0,
   "exit": 0,
   "stdout": "\r\n    Directory: C:\\TEMP\\probe08_rotjqkr_\\path-relative-up\\p\r\n\r\n\u001b[32;1mMode   \u001b[0m\u001b[32;1m              LastWriteTime\u001b[0m \u001b[32;1;3m        Length\u001b[0m\u001b[32;1m Name\u001b[0m\r\n\u001b[32;1m----   \u001b[0m \u001b[32;1m             -------------\u001b[0m \u001b[32;1m        ------\u001b[0m \u001b[32;1m----\u001b[0m\r\nd----           28-Sep-26    16:41                \u001b[44;1mq\u001b[0m\r\nMARK\r\n\r\n",
   "stderr": "",
   "outcome": "output-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": "\r\n    Directory: C:\\TEMP\\probe08_rotjqkr_\\path-trailing-slash\r\n\r\n\u001b[32;1mMode   \u001b[0m\u001b[32;1m              LastWriteTime\u001b[0m \u001b[32;1;3m        Length\u001b[0m\u001b[32;1m Name\u001b[0m\r\n\u001b[32;1m----   \u001b[0m \u001b[32;1m             -------------\u001b[0m \u001b[32;1m        ------\u001b[0m \u001b[32;1m----\u001b[0m\r\nd----           28-Sep-26    16:41                \u001b[44;1mt\u001b[0m\r\n\r\n",
   "stderr": "\u001b[31;1mGet-ChildItem: \u001b[31;1mCannot bind parameter 'Depth'. Cannot convert value \"t/\" to type \"System.UInt32\". Error: \"The input string 't/' was not in a correct format.\"\u001b[0m\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\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\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    Directory: C:\\TEMP\\probe08_rotjqkr_\\glob-star\r\n\r\n\u001b[32;1mMode   \u001b[0m\u001b[32;1m              LastWriteTime\u001b[0m\u001b[32;1m         Length\u001b[0m\u001b[32;1m Name\u001b[0m\r\n\u001b[32;1m----   \u001b[0m \u001b[32;1m             -------------\u001b[0m \u001b[32;1m        ------\u001b[0m \u001b[32;1m----\u001b[0m\r\n-a---           28-Sep-26    16:41              0 g1.txt\r\n-a---           28-Sep-26    16:41              0 g2.txt\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": "\u001b[31;1mParserError: \u001b[0m\r\n\u001b[31;1m\u001b[36;1mLine |\u001b[0m\r\n\u001b[31;1m\u001b[36;1m\u001b[36;1m   1 | \u001b[0m touch h1.md h2.md; for\u001b[36;1m \u001b[0mf in *.md; do echo $f; done | sort\u001b[0m\r\n\u001b[31;1m\u001b[36;1m\u001b[36;1m\u001b[0m\u001b[36;1m\u001b[0m\u001b[36;1m     | \u001b[31;1m                       ~\u001b[0m\r\n\u001b[31;1m\u001b[36;1m\u001b[36;1m\u001b[0m\u001b[36;1m\u001b[0m\u001b[36;1m\u001b[31;1m\u001b[31;1m\u001b[36;1m     | \u001b[31;1mMissing opening '(' after keyword 'for'.\u001b[0m\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": "\u001b[31;1mOut-File: \u001b[31;1mCould not find a part of the path 'C:\\dev\\null'.\u001b[0m\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": 0,
   "stdout": "\r\n    Directory: C:\\TEMP\\probe08_rotjqkr_\\find-name\r\n\r\n\u001b[32;1mMode   \u001b[0m\u001b[32;1m              LastWriteTime\u001b[0m \u001b[32;1;3m        Length\u001b[0m\u001b[32;1m Name\u001b[0m\r\n\u001b[32;1m----   \u001b[0m \u001b[32;1m             -------------\u001b[0m \u001b[32;1m        ------\u001b[0m \u001b[32;1m----\u001b[0m\r\nd----           28-Sep-26    16:41                \u001b[44;1md\u001b[0m\r\nd/a.py\r\nd/b.py\r\n\r\n",
   "stderr": "",
   "outcome": "output-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": 0,
   "stdout": "\r\n    Directory: C:\\TEMP\\probe08_rotjqkr_\\find-type-f\\e\r\n\r\n\u001b[32;1mMode   \u001b[0m\u001b[32;1m              LastWriteTime\u001b[0m \u001b[32;1;3m        Length\u001b[0m\u001b[32;1m Name\u001b[0m\r\n\u001b[32;1m----   \u001b[0m \u001b[32;1m             -------------\u001b[0m \u001b[32;1m        ------\u001b[0m \u001b[32;1m----\u001b[0m\r\nd----           28-Sep-26    16:41                \u001b[44;1msub\u001b[0m\r\ne/f1\n\r\n",
   "stderr": "",
   "outcome": "output-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": "\r\n    Directory: C:\\TEMP\\probe08_rotjqkr_\\find-exec\r\n\r\n\u001b[32;1mMode   \u001b[0m\u001b[32;1m              LastWriteTime\u001b[0m \u001b[32;1;3m        Length\u001b[0m\u001b[32;1m Name\u001b[0m\r\n\u001b[32;1m----   \u001b[0m \u001b[32;1m             -------------\u001b[0m \u001b[32;1m        ------\u001b[0m \u001b[32;1m----\u001b[0m\r\nd----           28-Sep-26    16:41                \u001b[44;1mk\u001b[0m\r\n\r\n",
   "stderr": "/usr/bin/find: missing argument to `-exec'\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 b\n",
   "stderr": "",
   "outcome": "ok"
  },
  {
   "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": 0,
   "stdout": "\r\n    Directory: C:\\TEMP\\probe08_rotjqkr_\\xargs-null\r\n\r\n\u001b[32;1mMode   \u001b[0m\u001b[32;1m              LastWriteTime\u001b[0m \u001b[32;1;3m        Length\u001b[0m\u001b[32;1m Name\u001b[0m\r\n\u001b[32;1m----   \u001b[0m \u001b[32;1m             -------------\u001b[0m \u001b[32;1m        ------\u001b[0m \u001b[32;1m----\u001b[0m\r\nd----           28-Sep-26    16:41                \u001b[44;1mn\u001b[0m\r\na b.txt\n\r\n",
   "stderr": "",
   "outcome": "output-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": "\u001b[31;1mParserError: \u001b[0m\r\n\u001b[31;1m\u001b[36;1mLine |\u001b[0m\r\n\u001b[31;1m\u001b[36;1m\u001b[36;1m   1 | \u001b[0m printf \"a\\nb\\n\" > f; wc -c \u001b[36;1m<\u001b[0m f | tr -d \" \"\u001b[0m\r\n\u001b[31;1m\u001b[36;1m\u001b[36;1m\u001b[0m\u001b[36;1m\u001b[0m\u001b[36;1m     | \u001b[31;1m                            ~\u001b[0m\r\n\u001b[31;1m\u001b[36;1m\u001b[36;1m\u001b[0m\u001b[36;1m\u001b[0m\u001b[36;1m\u001b[31;1m\u001b[31;1m\u001b[36;1m     | \u001b[31;1mThe '<' operator is reserved for future use.\u001b[0m\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\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": "\u001b[31;1mOpenError: \u001b[31;1mCould not find a part of the path 'C:\\dev\\null'.\u001b[0m\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": 0,
   "stdout": "1\r\n",
   "stderr": "\u001b[31;1mOut-File: \u001b[31;1mCould not find a part of the path 'C:\\dev\\null'.\u001b[0m\r\n",
   "outcome": "ok"
  },
  {
   "id": "tool-curl",
   "category": "tools",
   "command": "curl --version > /dev/null 2>&1 && echo present",
   "expected_stdout": "present",
   "expected_exit": 0,
   "exit": 1,
   "stdout": "",
   "stderr": "\u001b[31;1mOut-File: \u001b[31;1mCould not find a part of the path 'C:\\dev\\null'.\u001b[0m\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": "\u001b[31;1mOut-File: \u001b[31;1mCould not find a part of the path 'C:\\dev\\null'.\u001b[0m\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": 0,
   "stdout": "\r\n\u001b[32;1mInputObject\u001b[0m\u001b[32;1m SideIndicator\u001b[0m\r\n\u001b[32;1m-----------\u001b[0m \u001b[32;1m-------------\u001b[0m\r\nf2          =>\r\nf1          <=\r\nsame\r\n\r\n",
   "stderr": "",
   "outcome": "output-differs"
  },
  {
   "id": "tool-realpath",
   "category": "tools",
   "command": "realpath . > /dev/null && echo present",
   "expected_stdout": "present",
   "expected_exit": 0,
   "exit": 1,
   "stdout": "",
   "stderr": "\u001b[31;1mOpenError: \u001b[31;1mCould not find a part of the path 'C:\\dev\\null'.\u001b[0m\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": "  File: \"f\"\n    ID: 24b2f0f300000000 Namelen: 255     Type: UNKNOWN (0x3e72eff)\nBlock size: 4096       Fundamental block size: 4096\nBlocks: Total: 121935954  Free: 31489382   Available: 31489382\nInodes: Total: 18446744073709551615 Free: -1\n",
   "stderr": "\u001b[31;1mOut-File: \u001b[31;1mCould not find a part of the path 'C:\\dev\\null'.\u001b[0m\r\n/usr/bin/stat: cannot read file system information for '%z': No such file or directory\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": "\u001b[31;1mOpenError: \u001b[31;1mCould not find a part of the path 'C:\\dev\\null'.\u001b[0m\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": "\u001b[31;1mOpenError: \u001b[31;1mCould not find a part of the path 'C:\\dev\\null'.\u001b[0m\r\n",
   "outcome": "exit-differs"
  },
  {
   "id": "coh-write-read",
   "category": "coherence",
   "command": "echo v > f && cat f",
   "expected_stdout": "v",
   "expected_exit": 0,
   "exit": 0,
   "stdout": "v\r\n",
   "stderr": "",
   "outcome": "ok"
  },
  {
   "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": "\u001b[31;1mParserError: \u001b[0m\r\n\u001b[31;1m\u001b[36;1mLine |\u001b[0m\r\n\u001b[31;1m\u001b[36;1m\u001b[36;1m   1 | \u001b[0m echo abcd > f && wc -c \u001b[36;1m<\u001b[0m f | tr -d \" \"\u001b[0m\r\n\u001b[31;1m\u001b[36;1m\u001b[36;1m\u001b[0m\u001b[36;1m\u001b[0m\u001b[36;1m     | \u001b[31;1m                        ~\u001b[0m\r\n\u001b[31;1m\u001b[36;1m\u001b[36;1m\u001b[0m\u001b[36;1m\u001b[0m\u001b[36;1m\u001b[31;1m\u001b[31;1m\u001b[36;1m     | \u001b[31;1mThe '<' operator is reserved for future use.\u001b[0m\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": 0,
   "stdout": "./fresh.txt\n",
   "stderr": "",
   "outcome": "ok"
  },
  {
   "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": "b\r\n",
   "stderr": "",
   "outcome": "ok"
  },
  {
   "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": 0,
   "stdout": "checked\r\n",
   "stderr": "\u001b[31;1mOut-File: \u001b[31;1mCould not find a part of the path 'C:\\dev\\null'.\u001b[0m\r\n",
   "outcome": "ok"
  },
  {
   "id": "coh-mv-visible",
   "category": "coherence",
   "command": "echo v > src && mv src dst && cat dst",
   "expected_stdout": "v",
   "expected_exit": 0,
   "exit": 0,
   "stdout": "v\r\n",
   "stderr": "",
   "outcome": "ok"
  },
  {
   "id": "coh-subshell-sees",
   "category": "coherence",
   "command": "echo v > f && sh -c \"cat f\"",
   "expected_stdout": "v",
   "expected_exit": 0,
   "exit": 0,
   "stdout": "v\r\n",
   "stderr": "",
   "outcome": "ok"
  }
 ]
}
