#!/usr/bin/env bash # tests/fix-round-4-5b2-c-red.sh # The red proof of fix round 4.5b2, part C (plan # .claude/plans/trekplan-2026-11-03-review-gate-4-5b2-fixes.md, Step 7; # decisions 135 and 137), as a wrapper over the shared red script # tests/helpers/red-round.sh. Every id of the round has tests whose names # start with "[id]"; each must fail on an assertion at the round's start point # f1f5ab5 (part B's head, where all eight defects exist). Kept behaviour is an # untagged keep: test or a Control: assertion inside a red tagged test. # This wrapper passes the shared script: # --base BASE, the full sha of f1f5ab5; # --ids IDS (the round's nine ids); # --other-ids: the ids of fix round 4-5a, of 4-5b part 1, of part 2, of # part 3, of part 4, of 4.5b2 part A and of 4.5b2 part B, read with sed # from the IDS= lines of tests/fix-round-4-5a-red.sh, # tests/fix-round-4-5b-red.sh, tests/fix-round-4-5b-part-2-red.sh, # tests/fix-round-4-5b-part-3-red.sh, tests/fix-round-4-5b-part-4-red.sh, # tests/fix-round-4-5b2-a-red.sh and tests/fix-round-4-5b2-b-red.sh and # passed as ONE value, in that order (the shared script keeps only the # last --other-ids it is given); a tag on that list is not judged; # --mutations tests/fix-round-4-5b2-c-mutations.mjs (no mutation: no case # of this round reads a file under tests/); # the round's FILES: the seven new tagged test files. The scripts test is # untagged and not listed. # No --require-sha256: the round has no SHA-256 test. # Exit 0 all red, 1 a rule broken (the judge names it), 2 a setup failure # (also: no ids on one of the seven earlier IDS= lines); never 0 on a setup # failure. # bash 3.2 compatible, ASCII only, no arrays. set -u set -f cd "$(dirname "$0")/.." || { echo "red script: setup failure: cannot cd to the repo root" >&2; exit 2; } ROOT="$(pwd -P)" BASE=f1f5ab5528a376050dd03b7f7ac43f887596c9b4 IDS='DUP RSP NRL SYM WHD AMB CLU MMG PRC' FILES='tests/lib/unique-finding-ids.test.mjs tests/lib/review-rounds-stopped-prepare.test.mjs tests/lib/instruction-scope-depth.test.mjs tests/lib/merge-evidence-writer-head.test.mjs tests/hooks/merge-evidence-ambiguous.test.mjs tests/hooks/merge-evidence-many.test.mjs tests/lib/fix-round-4-5b2-c-prose.test.mjs' OTHER_A=$(sed -n "s/^IDS='\(.*\)'\$/\1/p" "$ROOT/tests/fix-round-4-5a-red.sh") if [ -z "$OTHER_A" ]; then echo "red script: setup failure: no ids on the IDS= line of $ROOT/tests/fix-round-4-5a-red.sh" >&2 exit 2 fi OTHER_B=$(sed -n "s/^IDS='\(.*\)'\$/\1/p" "$ROOT/tests/fix-round-4-5b-red.sh") if [ -z "$OTHER_B" ]; then echo "red script: setup failure: no ids on the IDS= line of $ROOT/tests/fix-round-4-5b-red.sh" >&2 exit 2 fi OTHER_C=$(sed -n "s/^IDS='\(.*\)'\$/\1/p" "$ROOT/tests/fix-round-4-5b-part-2-red.sh") if [ -z "$OTHER_C" ]; then echo "red script: setup failure: no ids on the IDS= line of $ROOT/tests/fix-round-4-5b-part-2-red.sh" >&2 exit 2 fi OTHER_D=$(sed -n "s/^IDS='\(.*\)'\$/\1/p" "$ROOT/tests/fix-round-4-5b-part-3-red.sh") if [ -z "$OTHER_D" ]; then echo "red script: setup failure: no ids on the IDS= line of $ROOT/tests/fix-round-4-5b-part-3-red.sh" >&2 exit 2 fi OTHER_E=$(sed -n "s/^IDS='\(.*\)'\$/\1/p" "$ROOT/tests/fix-round-4-5b-part-4-red.sh") if [ -z "$OTHER_E" ]; then echo "red script: setup failure: no ids on the IDS= line of $ROOT/tests/fix-round-4-5b-part-4-red.sh" >&2 exit 2 fi OTHER_F=$(sed -n "s/^IDS='\(.*\)'\$/\1/p" "$ROOT/tests/fix-round-4-5b2-a-red.sh") if [ -z "$OTHER_F" ]; then echo "red script: setup failure: no ids on the IDS= line of $ROOT/tests/fix-round-4-5b2-a-red.sh" >&2 exit 2 fi OTHER_G=$(sed -n "s/^IDS='\(.*\)'\$/\1/p" "$ROOT/tests/fix-round-4-5b2-b-red.sh") if [ -z "$OTHER_G" ]; then echo "red script: setup failure: no ids on the IDS= line of $ROOT/tests/fix-round-4-5b2-b-red.sh" >&2 exit 2 fi exec /bin/bash "$ROOT/tests/helpers/red-round.sh" --base "$BASE" --ids "$IDS" --other-ids "$OTHER_A $OTHER_B $OTHER_C $OTHER_D $OTHER_E $OTHER_F $OTHER_G" --mutations "$ROOT/tests/fix-round-4-5b2-c-mutations.mjs" $FILES