Files
troupe-standup/CHECK-q161
T
volt 82878043cb volt: Q161 -- jobs-table entry point is a bash wrapper over a grader that can say 'cannot grade'
wizard-work/ledger/CHECK-2026-11-02-jobs-table landed at 2e57e6b as a Python program with a python3 shebang, so `bash <path>` -- the invocation the q143 sweep, verify.py's doc-command leg and any reader use -- read rc 2 on shell syntax before grading a cell. Its derivation also read three source JSONs from the literal path /root, so with those absent it raised FileNotFoundError and exited 1: could-not-grade printed as a fault.

The grader moved to grade_jobs_table.py; the path keeps a bash wrapper. SRC_ROOT is JOBS_SRC_ROOT (default /root); a source mode with sources absent now exits 2 and says CANNOT GRADE; a new --offline mode grades the committed artifact and states that re-derivation was not attempted. CHECK-q161 (6 legs) grades the wrapper, the pre-repair blob at 2e57e6b under bash (rc 2), the hostless copy (rc 2), a tampered copy (rc 1), --offline, and the census row.
2026-11-03 05:52:58 +00:00

106 lines
5.0 KiB
Bash

#!/usr/bin/env bash
# CHECK-q161 -- the jobs-table entry point ran under an interpreter nobody
# invokes, and read a host root as if it were the repository (volt, 2026-11-03).
#
# The defect, measured at 2e57e6b: `wizard-work/ledger/CHECK-2026-11-02-jobs-table`
# was a Python program with a `python3` shebang, so the invocation every caller in
# this tree uses -- `bash <path>`, per the q143 sweep and tools/verify.py's
# doc-command leg -- read rc 2 on shell syntax errors before grading a cell. And
# its derivation read three source JSONs from the literal path `/root`, so with
# those absent it raised FileNotFoundError and exited 1: "could not grade" printed
# as a fault. The grader moved beside it (grade_jobs_table.py) and the path keeps
# a bash wrapper; the source root is overridable with JOBS_SRC_ROOT and an absent
# source now exits 2.
#
# Six legs:
# entry bash <path> at the tree reads 0 and prints VERDICT: PASS
# prefix the pre-repair blob from 2e57e6b, run under bash, reads 2 -- the
# cell that only works if the regression is real, not remembered
# hostless a copy of the grader with JOBS_SRC_ROOT at an empty directory
# reads 2 and says CANNOT GRADE (before: traceback, rc 1)
# tamper the same copy with one byte appended to jobs.csv reads 1
# offline `--offline` at the tree reads 0 and states re-derivation was
# not attempted, so the weaker reading is never silent
# sweep the q143 path census grades this entry point at 0
#
# Exit codes: 0 all legs passed, 1 a fault, 2 could not grade.
set -u
set -o pipefail
cd "$(dirname "${BASH_SOURCE[0]}")" || exit 2
ROOT="$(pwd)"
LEDGER="$ROOT/wizard-work/ledger"
ENTRY="$LEDGER/CHECK-2026-11-02-jobs-table"
GRADER="$LEDGER/grade_jobs_table.py"
SWEEP="$ROOT/wizard-work/volt/q143-check-sweep/check_sweep.py"
PY="${PYTHON:-python3}"
WORK="$(mktemp -d "${TMPDIR:-/tmp}/check-q161.XXXXXX")" || exit 2
trap 'rm -rf "$WORK"' EXIT
for f in "$ENTRY" "$GRADER" "$LEDGER/manifest.json" "$LEDGER/jobs.csv" "$SWEEP"; do
if [ ! -f "$f" ]; then
printf 'CANNOT GRADE: missing %s\n' "$f"
exit 2
fi
done
# The prefix leg grades a REVISION, so a .git-less export cannot answer it.
# That is rc 2 -- "could not grade" -- not a fault, per the repo's tools/ contract.
if ! git -C "$ROOT" rev-parse --show-toplevel >/dev/null 2>&1; then
printf 'CANNOT GRADE: %s is not a git work tree\n' "$ROOT"
exit 2
fi
passed=0
failed=0
row() { printf ' %-11s %s\n' "$1" "$2"; }
verdict() { if [ "$2" -eq 0 ]; then passed=$((passed + 1)); else failed=$((failed + 1)); fi; row "$1" "$3"; }
# --- leg 1: the entry point as every caller invokes it ----------------------
out="$(bash "$ENTRY" 2>&1)"; erc=$?
last="$(printf '%s' "$out" | tail -1)"
verdict entry "$([ "$erc" -eq 0 ] && printf '%s' "$last" | grep -q '^VERDICT: PASS' && echo 0 || echo 1)" \
"rc=$erc ${last:-<no output>}"
# --- leg 2: the pre-repair blob, same invocation ----------------------------
git -C "$ROOT" show 2e57e6b:wizard-work/ledger/CHECK-2026-11-02-jobs-table \
> "$WORK/pre_check" 2>/dev/null || { printf 'CANNOT GRADE: 2e57e6b blob unreadable\n'; exit 2; }
out="$(bash "$WORK/pre_check" 2>&1)"; prc=$?
last="$(printf '%s' "$out" | grep -E 'syntax error|command not found' | tail -1)"
verdict prefix "$([ "$prc" -eq 2 ] && echo 0 || echo 1)" \
"rc=$prc (want 2) ${last:-<no shell error line>}"
# --- legs 3 and 4: a copy, graded where the sources are absent --------------
cp "$GRADER" "$LEDGER/manifest.json" "$LEDGER/jobs.csv" "$WORK/" \
|| { printf 'CANNOT GRADE: artifact copy failed\n'; exit 2; }
mkdir -p "$WORK/empty" || exit 2
out="$(cd "$WORK" && JOBS_SRC_ROOT="$WORK/empty" "$PY" grade_jobs_table.py 2>&1)"; hrc=$?
last="$(printf '%s' "$out" | tail -1)"
verdict hostless "$([ "$hrc" -eq 2 ] && printf '%s' "$last" | grep -q '^CANNOT GRADE' && echo 0 || echo 1)" \
"rc=$hrc (want 2) ${last:-<no output>}"
printf 'x' >> "$WORK/jobs.csv" || { printf 'CANNOT GRADE: tamper failed\n'; exit 2; }
out="$(cd "$WORK" && "$PY" grade_jobs_table.py --offline 2>&1)"; trc=$?
last="$(printf '%s' "$out" | grep -E '^(VERDICT| - )' | tail -1)"
verdict tamper "$([ "$trc" -eq 1 ] && echo 0 || echo 1)" \
"rc=$trc (want 1) ${last:-<no verdict line>}"
# --- leg 5: the weaker mode must say what it did not measure ----------------
out="$(bash "$ENTRY" --offline 2>&1)"; orc=$?
last="$(printf '%s' "$out" | grep 're_derivation' | tail -1)"
verdict offline "$([ "$orc" -eq 0 ] && printf '%s' "$last" | grep -q 'NOT ATTEMPTED' && echo 0 || echo 1)" \
"rc=$orc ${last:-<no re_derivation line>}"
# --- leg 6: the census of entry points grades this path ---------------------
out="$("$PY" "$SWEEP" --repo "$ROOT" --only wizard-work/ledger/CHECK-2026-11-02-jobs-table --check 2>&1)"; src=$?
last="$(printf '%s' "$out" | tail -1)"
verdict sweep "$([ "$src" -eq 0 ] && echo 0 || echo 1)" \
"rc=$src $last"
if [ "$failed" -eq 0 ]; then
echo "q161: $passed leg(s), 0 fault(s), rc 0"
exit 0
fi
echo "q161: $passed passed, $failed fault(s), rc 1"
exit 1