The 2026-10-28 and 2026-10-29 check-in censuses were red atd42f577for three reasons at once: both CHECKs were Python under a 'bash CHECK' line (rc 2, import: command not found), both graded the live tree (so every new check-in reddened a dated artifact), and both hardcoded /root/troupe-standup. The 10-28 table also carried a 101st row for checkins/2026-10-27-sentinel.md, a file in no revision. - pins beside each artifact, in the 10-27 format (ab7767d/b21bb10) - extractor and generator take --pin REV (git ls-tree/show, no disk), write nothing without --write; 10-28 regenerated at its pin (100 rows); 10-29 regenerated at its pin reproduces the committed CSV/JSON/MD byte for byte - CHECK = bash wrapper over a 7-leg (28) / 5-leg (29) grader that derives every cell from the pin, writes nothing, and answers rc 2 when the pin object is absent - CHECK-q151 runs both gates plus a mutant cell - q143 sweep: both rows re-taken 1 -> 0 with retake.py, CHECK-q151 added; q137 open-set pin moved with the record
66 lines
2.8 KiB
Bash
Executable File
66 lines
2.8 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# CHECK-q151 -- the two later check-in censuses, graded at the revisions they
|
|
# describe, plus the mutant that proves the green is not the only thing they
|
|
# can print.
|
|
#
|
|
# WHAT WAS WRONG (measured at d42f577, before this tick's edits)
|
|
# Both gates were Python files under a `bash CHECK` line, so the documented
|
|
# invocation exited 2 without grading anything (`line 15: import: command
|
|
# not found`, `line 10: ROOT: command not found`). Run with python3 they were
|
|
# red on every clone: their scope was the LIVE directory or index, so each new
|
|
# check-in moved the numbers they compare against, and 2026-10-28's table
|
|
# carried a 101st row for `checkins/2026-10-27-sentinel.md`, a file no
|
|
# revision holds (`git log --all -- checkins/2026-10-27-sentinel.md` -> 0
|
|
# commits; it is untracked in the work tree). Both graders also hardcoded
|
|
# /root/troupe-standup.
|
|
#
|
|
# WHAT THIS GRADES
|
|
# 1. the 2026-10-28 census against `ab7767d:checkins`, cell for cell across
|
|
# the TSV, the MD (inventory, headline, per-signer) and the JSON;
|
|
# 2. the 2026-10-29 census against `b21bb10:checkins`, cell for cell across
|
|
# the CSV, the MD table and the JSON;
|
|
# 3. a mutant of the 10-29 table in a COPY: one signee cell moved must exit 1,
|
|
# so a green here is a measurement rather than a print.
|
|
#
|
|
# rc 0 every leg holds rc 1 a leg failed rc 2 could not grade
|
|
set -u
|
|
ROOT="$(git -C "$(dirname "$0")" rev-parse --show-toplevel 2>/dev/null)" || exit 2
|
|
[ -n "$ROOT" ] || exit 2
|
|
cd "$ROOT" || exit 2
|
|
|
|
D28=wizard-work/ledger/2026-10-28-checkin-census
|
|
D29=wizard-work/ledger/2026-10-29-checkin-census
|
|
|
|
legs=0
|
|
faults=0
|
|
leg() { # leg <name> <rc> <detail>
|
|
legs=$((legs + 1))
|
|
if [ "$2" -eq 0 ]; then printf 'PASS %-22s %s\n' "$1" "$3"
|
|
else printf 'FAIL %-22s %s\n' "$1" "$3"; faults=$((faults + 1)); fi
|
|
}
|
|
|
|
out="$(bash "$D28/CHECK" 2>&1)"; rc=$?
|
|
leg census-2026-10-28 "$rc" "$(printf '%s' "$out" | grep -m1 -E '^(VERDICT|FAIL|CANNOT)')"
|
|
|
|
out="$(bash "$D29/CHECK" 2>&1)"; rc=$?
|
|
leg census-2026-10-29 "$rc" "$(printf '%s' "$out" | grep -m1 -E '^(VERDICT|FAIL|CANNOT)')"
|
|
|
|
tmp="$(mktemp -d "${TMPDIR:-/tmp}/q151-mut-XXXX")" || exit 2
|
|
trap 'rm -rf "$tmp"' EXIT
|
|
cp -a "$D29" "$tmp/census" || { echo "CANNOT GRADE: cannot copy $D29"; exit 2; }
|
|
sed -i 's/^checkins\/2026-09-24-zephyrus-02.md,2026-09-24,zephyrus,/checkins\/2026-09-24-zephyrus-02.md,2026-09-24,zephyrus-02,/' \
|
|
"$tmp/census/checkin-census.csv"
|
|
mout="$(python3 "$tmp/census/grade.py" --repo "$ROOT" 2>&1)"; mrc=$?
|
|
if [ "$mrc" -eq 1 ] && printf '%s' "$mout" | grep -q '^FAIL: CSV row'; then
|
|
leg mutant 0 "a moved signee cell reads rc 1: $(printf '%s' "$mout" | grep -m1 '^FAIL:')"
|
|
else
|
|
leg mutant 1 "mutant did not red the table (rc=$mrc)"
|
|
fi
|
|
|
|
if [ "$faults" -eq 0 ]; then
|
|
echo "q151: $legs leg(s), all passed"
|
|
exit 0
|
|
fi
|
|
echo "q151: $legs leg(s), $faults fault(s)"
|
|
exit 1
|