Files

323 lines
15 KiB
JSON

[
{
"id": "M1",
"file": "scripts/case2-unit.sh",
"old": " --tester-port) die \"case2-unit.sh retires tester TCP; use --tester-socket\" ;;",
"new": "",
"killer": "packages/cli/tests/case2-unit.test.mjs",
"pattern": "row253 factory refuses retired TCP"
},
{
"id": "M2",
"file": "scripts/case2-unit.sh",
"old": "[ \"$PROFILE\" = factory ] || die \"the library profile refuses --tester-socket\"",
"new": ":",
"killer": "packages/cli/tests/case2-unit.test.mjs",
"pattern": "library refuses a privileged-floor miss"
},
{
"id": "M3",
"file": "scripts/case2-unit.sh",
"old": " [ -z \"${seen[$name]:-}\" ] || die \"serve flag $name given twice\"",
"new": " :",
"killer": "packages/cli/tests/case2-unit.test.mjs",
"pattern": "factory refuses duplicate socket"
},
{
"id": "M4",
"file": "scripts/case2-unit.sh",
"old": " [ \"$rc\" = 0 ] || { case \"$rc\" in 81|85|86|87|88) exit \"$rc\" ;; *) exit 87 ;; esac; }",
"new": " :",
"killer": "packages/cli/tests/case2-unit.test.mjs",
"pattern": "row253 installer refuses unsafe location and query facts"
},
{
"id": "M5",
"file": "scripts/case2-unit.sh",
"old": " [ \"$TS_MARKED\" = true ] || die \"the target does not support --tester-socket\"",
"new": " :",
"killer": "packages/cli/tests/case2-unit.test.mjs",
"pattern": "row253 installer refuses unsafe location and query facts"
},
{
"id": "M6",
"file": "scripts/case2-unit.sh",
"old": "case \"$data\" in \"$home\"/*)",
"new": "case \"$data\" in \"$home\"*)",
"killer": "packages/cli/tests/case2-unit.test.mjs",
"pattern": "row253 installer refuses unsafe location and query facts"
},
{
"id": "M7",
"file": "scripts/case2-unit.sh",
"old": "case \"$home/\" in /home/*",
"new": "case /allowed/ in /home/*",
"killer": "packages/cli/tests/case2-unit.test.mjs",
"pattern": "row253 protected homes"
},
{
"id": "M8",
"file": "scripts/case2-unit.sh",
"old": " [ \"${#TS_SOCKET}\" -le 107 ] || { TS_REASON=too-long; return 1; }",
"new": " :",
"killer": "packages/cli/tests/case2-unit.test.mjs",
"pattern": "row253 installer refuses unsafe location and query facts"
},
{
"id": "M9",
"file": "scripts/case2-unit.sh",
"old": " [ -d \"$parent\" ] || { TS_REASON=parent-type; return 1; }",
"new": " :",
"killer": "packages/cli/tests/case2-unit.test.mjs",
"pattern": "row253 installer refuses unsafe location and query facts"
},
{
"id": "M10",
"file": "scripts/case2-unit.sh",
"old": " [ \"${st% *}\" = \"$uid\" ] || { TS_REASON=parent-owner; return 1; }",
"new": " :",
"killer": "packages/cli/tests/case2-unit.test.mjs",
"pattern": "row253 installer refuses unsafe location and query facts"
},
{
"id": "M11",
"file": "scripts/case2-unit.sh",
"old": " [[ \"${st#* }\" =~ ^[0-7]{3,4}$ ]] && (( (8#${st#* } & 8#077) == 0 )) || { TS_REASON=parent-mode; return 1; }",
"new": " :",
"killer": "packages/cli/tests/case2-unit.test.mjs",
"pattern": "row253 installer refuses unsafe location and query facts"
},
{
"id": "M12",
"file": "scripts/case1-accept.sh",
"old": " --tester-port) refuse \"case1-accept.sh retires tester TCP; use --tester-socket\" ;;",
"new": "",
"killer": "packages/cli/tests/case1-accept.test.mjs",
"pattern": "a bad args file refuses"
},
{
"id": "M13",
"file": "scripts/case1-accept.sh",
"old": "[ \"$TESTER_SOCKET\" = 1 ] || refuse \"$ARGS_FILE needs one bare --tester-socket after --\"",
"new": ":",
"killer": "packages/cli/tests/case1-accept.test.mjs",
"pattern": "a bad args file refuses"
},
{
"id": "M14",
"file": "scripts/case1-accept.sh",
"old": " *) refuse \"unknown serve flag $a\" ;;",
"new": " *) : ;;",
"killer": "packages/cli/tests/case1-accept.test.mjs",
"pattern": "a bad args file refuses"
},
{
"id": "M15",
"file": "scripts/case1-accept.sh",
"old": " [ \"$rc\" = 0 ] || { case \"$rc\" in 81|85|86|87|88) exit \"$rc\" ;; *) exit 87 ;; esac; }",
"new": " :",
"killer": "packages/cli/tests/case1-accept.test.mjs",
"pattern": "row253 acceptance rejects bad config"
},
{
"id": "M16",
"file": "scripts/case1-accept.sh",
"old": "other=\"$(listeners 7331)$(listeners 7333)\"",
"new": "other=\"$(listeners 7331)\"",
"killer": "packages/cli/tests/case1-accept.test.mjs",
"pattern": "row253 P8 refuses"
},
{
"id": "M17",
"file": "scripts/case1-accept.sh",
"old": " [[ \"$p\" =~ ^$MOSAIC_UID\\ 700\\ directory\\ [0-9]+\\ [0-9]+$ ]] || return 1",
"new": " :",
"killer": "packages/cli/tests/case1-accept.test.mjs",
"pattern": "row253 P10 refuses unsafe metadata"
},
{
"id": "M18",
"file": "scripts/case1-accept.sh",
"old": " [[ \"$s\" =~ ^$MOSAIC_UID\\ 600\\ socket\\ [0-9]+\\ [0-9]+$ ]] || return 1",
"new": " :",
"killer": "packages/cli/tests/case1-accept.test.mjs",
"pattern": "row253 P10 refuses unsafe metadata"
},
{
"id": "M19",
"file": "scripts/case1-accept.sh",
"old": "[ \"$pid\" = \"$CON_PID\" ] && [ \"$uid\" = \"$MOSAIC_UID\" ]",
"new": "true && [ \"$uid\" = \"$MOSAIC_UID\" ]",
"killer": "packages/cli/tests/case1-accept.test.mjs",
"pattern": "row253 P10 refuses unsafe metadata"
},
{
"id": "M20",
"file": "scripts/case1-accept.sh",
"old": "[ \"$pid\" = \"$CON_PID\" ] && [ \"$uid\" = \"$MOSAIC_UID\" ]",
"new": "[ \"$pid\" = \"$CON_PID\" ] && true",
"killer": "packages/cli/tests/case1-accept.test.mjs",
"pattern": "row253 P10 refuses unsafe metadata"
},
{
"id": "M21",
"file": "scripts/case1-accept.sh",
"old": "pattern='^([1-9][0-9]{0,9}) ([0-9]{1,10}) ([0-9]{1,10})$'",
"new": "pattern='^([1-9][0-9]{0,9}) ([0-9]{1,10}) ([0-9]{1,10})'",
"killer": "packages/cli/tests/case1-accept.test.mjs",
"pattern": "row253 P10 refuses unsafe metadata"
},
{
"id": "M22",
"file": "scripts/case1-accept.sh",
"old": " magic=\"$(od -An -tx1 -N4 -- \"$ROOT$real\" 2>/dev/null | tr -d ' \\n')\"\n [ \"$magic\" = 7f454c46 ] || return 1",
"new": " magic=\"$(od -An -tx1 -N4 -- \"$ROOT$real\" 2>/dev/null | tr -d ' \\n')\"\n :",
"killer": "packages/cli/tests/case1-accept.test.mjs",
"pattern": "row253 P10 refuses unsafe metadata"
},
{
"id": "M23",
"file": "scripts/case1-accept.sh",
"old": " [ \"$before\" = \"$after\" ] || why=changed",
"new": " :",
"killer": "packages/cli/tests/case1-accept.test.mjs",
"pattern": "row253 P10 refuses unsafe metadata"
},
{
"id": "M24",
"file": "scripts/case2-unit.sh",
"old": "sudo -u \"$user\" -H env -i",
"new": "sudo -H env -i",
"killer": "packages/cli/tests/case2-unit.test.mjs",
"pattern": "row253 factory socket uses actual config"
},
{
"id": "M25",
"file": "scripts/case1-accept.sh",
"old": "tester_capture 2 4 128 \"$S_USER\" \"$S_HOME\"",
"new": "tester_capture 2 4 128 wrong-user \"$S_HOME\"",
"killer": "packages/cli/tests/case1-accept.test.mjs",
"pattern": "row253 socket observation uses configured root"
},
{
"id": "M26",
"file": "scripts/case1-accept.sh",
"old": " [[ \"$floor\" =~ ^[0-9]{1,5}$ ]] && [ \"$floor\" -gt \"$PORT\" ] || why=floor",
"new": " :",
"killer": "packages/cli/tests/case1-accept.test.mjs",
"pattern": "row253 P10 refuses unsafe metadata"
},
{
"id": "M27",
"file": "scripts/case1-accept.sh",
"old": "p=struct.unpack(\"3i\",s.getsockopt(socket.SOL_SOCKET,socket.SO_PEERCRED,12))",
"new": "import os; p=(os.getpid(),os.getuid(),os.getgid())",
"killer": "packages/cli/tests/case1-accept.test.mjs",
"pattern": "row253 socket observation uses configured root"
},
{
"id": "M28",
"file": "scripts/case2-unit.sh",
"old": " [ ! -L \"$parent\" ] || { TS_REASON=symlink-parent; return 1; }",
"new": " :",
"killer": "packages/cli/tests/case2-unit.test.mjs",
"pattern": "row253 installer refuses unsafe location and query facts"
},
{
"id": "M29",
"file": "scripts/case2-unit.sh",
"old": " [ ! -L \"$prefix$at\" ] || { TS_REASON=symlink-component; return 1; }",
"new": " :",
"killer": "packages/cli/tests/case2-unit.test.mjs",
"pattern": "row253 installer refuses unsafe location and query facts"
},
{
"id": "M30",
"file": "scripts/case2-unit.sh",
"old": " case \"$data/\" in */./*|*/../*|*//* ) TS_REASON=not-normalized; return 1 ;; esac",
"new": " :",
"killer": "packages/cli/tests/case2-unit.test.mjs",
"pattern": "row253 installer refuses unsafe location and query facts"
},
{
"id": "M31",
"file": "scripts/case2-unit.sh",
"old": " [[ \"$1\" =~ $pattern ]] || return 1",
"new": " [[ \"$1\" =~ \\\"dataRoot\\\":\\\"([^\\\"]+)\\\",\\\"socket\\\":(true|false) ]] || return 1",
"killer": "packages/cli/tests/case2-unit.test.mjs",
"pattern": "row253 config parser is strict"
},
{
"id": "M32",
"file": "scripts/case2-unit.sh",
"old": "[ \"$(wc -c < \"$file\")\" -le \"$maximum\" ]",
"new": "true",
"killer": "packages/cli/tests/case2-unit.test.mjs",
"pattern": "row253 C4 overflow is output-limit"
},
{
"id": "M33",
"file": "scripts/case2-unit.sh",
"old": "\"$TS_TIMEOUT\" --verbose --signal=KILL \"${outer}s\"",
"new": "\"$TS_TIMEOUT\" --foreground --verbose --signal=KILL \"${outer}s\"",
"killer": "packages/cli/tests/case2-unit.test.mjs",
"pattern": "row253 query reaps its group"
},
{
"id": "M34",
"file": "scripts/case2-unit.sh",
"old": "seconds=\"$1\" setsid_bin=\"$2\" sleep_bin=\"$3\"; shift 3",
"new": "seconds=\"$1\" setsid_bin=\"$2\" sleep_bin=\"$3\"; shift 3\nexec \"$@\"",
"killer": "packages/cli/tests/case2-unit.test.mjs",
"pattern": "row253 C4 signals query"
},
{
"id": "M35",
"file": "scripts/case2-unit.sh",
"old": "LC_ALL=C \"$TS_TIMEOUT\" --verbose --signal=KILL \"${outer}s\" \"$TS_BASH\" -c",
"new": "\"$TS_BASH\" -c",
"killer": "packages/cli/tests/case2-unit.test.mjs",
"pattern": "row253 C4 stalled supervisor"
},
{
"id": "M36",
"file": "scripts/case2-unit.sh",
"old": " [ \"$ST_SESSION\" = \"$child\" ] || continue",
"new": " [ \"$ST_SESSION\" = \"$child\" ] || continue\n [ \"$ST_GROUP\" = \"$child\" ] || continue",
"killer": "packages/cli/tests/case2-unit.test.mjs",
"pattern": "row253 C4 member query"
},
{
"id": "M37",
"file": "scripts/case2-unit.sh",
"old": " LC_ALL=C \"$TS_TIMEOUT\" --verbose --signal=KILL \"${outer}s\" \"$TS_BASH\" -c '\n set -o pipefail\n maximum=\"$1\"; head_bin=\"$2\"; shift 2\n \"$@\" 2>/dev/null | \"$head_bin\" -c \"$((maximum + 1))\"\n ' -- \"$maximum\" \"$TS_HEAD\" sudo -u \"$user\" -H env -i \"HOME=$home\" \"PATH=$path\" \"$TS_BASH\" -c \"$TESTER_SUPERVISOR\" -- \"$inner\" \"$TS_SETSID\" \"$TS_SLEEP\" \"$@\" > \"$file\" 2> \"$notice\" &\n child=$!\n wait \"$child\" 2>/dev/null || rc=$?\n kill -KILL -- \"-$child\" 2>/dev/null || :\n # Only GNU timeout and the trusted head can write this root-side channel.\n if [ \"$rc\" = 137 ] && [[ \"$(<\"$notice\")\" == *': sending signal KILL to command '* ]]; then exit 82; fi\n [ \"$(wc -c < \"$file\")\" -le \"$maximum\" ] || exit 83\n [ \"$rc\" = 0 ] || { case \"$rc\" in 81|85|86|87|88) exit \"$rc\" ;; *) exit 87 ;; esac; }",
"new": " LC_ALL=C \"$TS_TIMEOUT\" --verbose --signal=KILL \"${outer}s\" \"$TS_BASH\" -c '\n set -o pipefail\n maximum=\"$1\"; head_bin=\"$2\"; shift 2\n \"$@\" 2>/dev/null | cat\n ' -- \"$maximum\" \"$TS_HEAD\" sudo -u \"$user\" -H env -i \"HOME=$home\" \"PATH=$path\" \"$TS_BASH\" -c \"$TESTER_SUPERVISOR\" -- \"$inner\" \"$TS_SETSID\" \"$TS_SLEEP\" \"$@\" > \"$file\" 2> \"$notice\" &\n child=$!\n wait \"$child\" 2>/dev/null || rc=$?\n kill -KILL -- \"-$child\" 2>/dev/null || :\n # Only GNU timeout and the trusted head can write this root-side channel.\n if [ \"$rc\" = 137 ] && [[ \"$(<\"$notice\")\" == *': sending signal KILL to command '* ]]; then exit 82; fi\n :\n [ \"$rc\" = 0 ] || { case \"$rc\" in 81|85|86|87|88) exit \"$rc\" ;; *) exit 87 ;; esac; }",
"killer": "packages/cli/tests/case2-unit.test.mjs",
"pattern": "row253 C4 overflow is output-limit"
},
{
"id": "M38",
"file": "scripts/case2-unit.sh",
"old": "\"$setsid_bin\" \"$@\" & child=$!",
"new": "\"$@\" & child=$!",
"killer": "packages/cli/tests/case2-unit.test.mjs",
"pattern": "row253 C4 signals query"
},
{
"id": "M39",
"file": "scripts/case2-unit.sh",
"old": "MOSAIC_TESTER_SUPERVISOR' || :\nset +m",
"new": "MOSAIC_TESTER_SUPERVISOR' || :\n# one-copy drift\nset +m",
"killer": "packages/cli/tests/case2-unit.test.mjs",
"pattern": "row253 C4 inline supervisor is byte-identical"
},
{
"id": "M40",
"file": "scripts/case2-unit.sh",
"old": "clean_session() {\n local entry pid rc live until=\"\"\n while :; do\n live=0\n for entry in /proc/[0-9]*/stat; do\n pid=\"${entry%/stat}\"; pid=\"${pid##*/}\"\n rc=0; stat_fields \"$pid\" || rc=$?\n [ \"$rc\" != 3 ] || continue\n [ \"$rc\" = 0 ] || return 1\n [ \"$ST_SESSION\" = \"$child\" ] || continue\n case \"$ST_STATE\" in Z|X) continue ;; esac\n live=1\n if ! kill -KILL \"$pid\" 2>/dev/null; then\n rc=0; stat_fields \"$pid\" || rc=$?\n [ \"$rc\" = 3 ] || { [ \"$rc\" = 0 ] && { [ \"$ST_STATE\" = Z ] || [ \"$ST_STATE\" = X ]; }; } || return 1\n fi\n done\n [ \"$live\" != 0 ] || return 0\n clock_cs || return 1\n # Inventory pass 1 is outside the bounded confirmation/retry budget.\n [ -n \"$until\" ] || until=$((CLOCK_CS + 25))\n [ \"$CLOCK_CS\" -lt \"$until\" ] || return 1\n \"$sleep_bin\" 0.01\n done\n}\n",
"new": "clean_session() {\n local entry pid rc live until\n clock_cs || return 1\n until=$((CLOCK_CS + 25))\n while :; do\n live=0\n for entry in /proc/[0-9]*/stat; do\n pid=\"${entry%/stat}\"; pid=\"${pid##*/}\"\n rc=0; stat_fields \"$pid\" || rc=$?\n [ \"$rc\" != 3 ] || continue\n [ \"$rc\" = 0 ] || return 1\n [ \"$ST_SESSION\" = \"$child\" ] || continue\n case \"$ST_STATE\" in Z|X) continue ;; esac\n live=1\n if ! kill -KILL \"$pid\" 2>/dev/null; then\n rc=0; stat_fields \"$pid\" || rc=$?\n [ \"$rc\" = 3 ] || { [ \"$rc\" = 0 ] && { [ \"$ST_STATE\" = Z ] || [ \"$ST_STATE\" = X ]; }; } || return 1\n fi\n done\n [ \"$live\" != 0 ] || return 0\n clock_cs || return 1\n # Inventory pass 1 is outside the bounded confirmation/retry budget.\n :\n [ \"$CLOCK_CS\" -lt \"$until\" ] || return 1\n \"$sleep_bin\" 0.01\n done\n}\n",
"killer": "packages/cli/tests/case2-unit.test.mjs",
"pattern": "row253 C4 cleanup budget starts after inventory pass one"
}
]