guards that landed unsigned WORK-QUEUE.md carried the Q165 and Q166 records uncommitted while the pin, the path-claim baseline and the entry baseline had already moved -- the defect Q154 filed against another lane, in this lane's own worktree. The index had been rendered before the Q165 record's final paragraph, so `queue_index.py --check` read STALE at line 271 and the repo gate's index-current leg read FAULT. - docs/queue-index.md re-rendered by `tools/queue_index.py --repo . --write` (315,689 bytes; 263 items, 114 sections, 149 record blocks, 101 ids). - CHECK-q159 and its module wizard-work/volt/q143-check-sweep/block_rows.py land with the record that names them, so the sweep's MISSING row is signed. - check_entry_baseline.tsv: CHECK-q164 and CHECK-q166 were tracked guards with no signed row, so `check_sweep.py --paths` read both as NEW; their codes were measured here (q164 7 legs in 55.1 s, q166 4 legs) and signed. CHECK-q159's tally string was re-measured (5 legs -> 6). Measured before this commit, at this worktree: verify.py --fast 12 legs, 11 pass, 0 fault, 1 skipped, gate OK, rc 0; check_sweep.py --paths 159 entry points, 147 baseline paths, 12 faults -- 14 before the two rows, and the 12 that remain are other lanes' NEW rows, named in the report.
182 lines
7.7 KiB
Bash
Executable File
182 lines
7.7 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# CHECK-q159 -- the sweep's path census is complete, and the one red entry point
|
|
# it found was repaired rather than signed away (volt, 2026-11-02; the census and
|
|
# register legs were re-scoped 2026-11-03 by Q167, see the header of each).
|
|
#
|
|
# What this guards:
|
|
# 1. census the path census names NO fault for any of the 21 paths this
|
|
# item signed, and does not name CHECK-q159 itself as missing or
|
|
# unreviewed. Faults on other lanes' new entry points are printed
|
|
# as context and NOT graded here: that repo-wide tooth is
|
|
# CHECK-q143's, and a leg that reds when a neighbour signs a row
|
|
# cannot be re-run, which is why this one was red on arrival.
|
|
# 2. coverage the beam lane's coverage tool reads 0 faults -- the leg that was
|
|
# red because tarjan_scc.py had no collected cell.
|
|
# 3. cells test_tarjan_scc.py is collected and its 8 cells pass.
|
|
# 4. mutant the same 8 cells FAIL against a copy of tarjan_scc.py with the
|
|
# parent lowlink propagation dropped. A cell that cannot red is
|
|
# not evidence; this leg is why the test is worth its name.
|
|
# 5. register the Q159 block in check_entry_baseline.tsv reads as 21 rows, of
|
|
# which exactly 2 carry a non-zero code and both are the KNOWN RED
|
|
# rows this tick signed. The block has a boundary now: the awk
|
|
# this replaced counted from its marker to EOF and read 27, so it
|
|
# graded six later sections of other lanes' rows.
|
|
# 6. scope block_rows.py's own selftest passes, including the cell that
|
|
# shows a marker-to-EOF reading of the same fixture disagrees with
|
|
# the block reading -- so the boundary is a measured difference and
|
|
# not a claim in a comment. No cell count is pinned: a fixture
|
|
# added later must not redden this leg (the Q158 defect).
|
|
#
|
|
# Exit codes (tools/ contract): 0 every leg passed, 1 a fault, 2 could not grade.
|
|
set -u
|
|
set -o pipefail
|
|
|
|
cd "$(dirname "${BASH_SOURCE[0]}")" || exit 2
|
|
ROOT="$(pwd)"
|
|
SWEEP="$ROOT/wizard-work/volt/q143-check-sweep/check_sweep.py"
|
|
BLOCK="$ROOT/wizard-work/volt/q143-check-sweep/block_rows.py"
|
|
BASE="$ROOT/wizard-work/volt/q143-check-sweep/check_entry_baseline.tsv"
|
|
MARK='rows added by hand (Q159'
|
|
BEAM="$ROOT/wizard-work/beam"
|
|
WORK="$(mktemp -d "${TMPDIR:-/tmp}/check-q159.XXXXXX")" || exit 2
|
|
trap 'rm -rf "$WORK"' EXIT
|
|
|
|
pass=0
|
|
fail=0
|
|
ung=0
|
|
row() { printf ' %-12s %s\n' "$1" "$2"; }
|
|
|
|
for f in "$SWEEP" "$BLOCK" "$BASE" "$BEAM/tarjan_scc.py" \
|
|
"$BEAM/test_tarjan_scc.py" "$BEAM/check_coverage.py"; do
|
|
if [ ! -f "$f" ]; then
|
|
echo "CHECK-q159: no $f -- cannot grade" >&2
|
|
exit 2
|
|
fi
|
|
done
|
|
|
|
# The 21 paths this item signed, read through the block boundary.
|
|
if ! python3 "$BLOCK" --file "$BASE" --marker "$MARK" --paths \
|
|
| LC_ALL=C sort >"$WORK/block.paths"; then
|
|
echo "CHECK-q159: cannot read the Q159 block -- cannot grade" >&2
|
|
exit 2
|
|
fi
|
|
nblock="$(wc -l <"$WORK/block.paths" | tr -d ' ')"
|
|
|
|
# --- 1: the path census, scoped to this item's own rows -----------------------
|
|
python3 "$SWEEP" --repo "$ROOT" --paths >"$WORK/paths.out" 2>&1
|
|
p=$?
|
|
total="$(tail -n 1 "$WORK/paths.out")"
|
|
awk '/^FAIL:/ { print $3 }' "$WORK/paths.out" | LC_ALL=C sort -u >"$WORK/fault.paths"
|
|
own="$(LC_ALL=C comm -12 "$WORK/fault.paths" "$WORK/block.paths" | tr '\n' ' ')"
|
|
foreign="$(LC_ALL=C comm -23 "$WORK/fault.paths" "$WORK/block.paths" | tr '\n' ' ')"
|
|
selfault="$(awk '$1 == "FAIL:" && $3 == "CHECK-q159" { n++ } END { print n + 0 }' \
|
|
"$WORK/paths.out")"
|
|
if [ "$p" -eq 2 ]; then
|
|
row census "UNG the path census could not grade this tree :: $total"
|
|
ung=$((ung + 1))
|
|
elif [ -n "$own" ] || [ "$selfault" -ne 0 ] || [ "$nblock" -ne 21 ]; then
|
|
row census "FAULT block=$nblock rows, faulted: ${own:-none}; CHECK-q159 named: $selfault :: $total"
|
|
fail=$((fail + 1))
|
|
else
|
|
nforeign="$(printf '%s' "$foreign" | wc -w | tr -d ' ')"
|
|
row census "PASS none of the 21 signed paths is faulted :: $total"
|
|
row context "$nforeign repo-wide fault(s) on other lanes' rows, ungraded here"
|
|
pass=$((pass + 1))
|
|
fi
|
|
|
|
# --- 2: the coverage leg the repair was for ----------------------------------
|
|
python3 "$BEAM/check_coverage.py" >"$WORK/cov.out" 2>&1
|
|
p=$?
|
|
if [ "$p" -eq 0 ] && grep -q '^coverage: PASS' "$WORK/cov.out"; then
|
|
row coverage "PASS $(grep '^coverage: [0-9]' "$WORK/cov.out" | tail -n 1)"
|
|
pass=$((pass + 1))
|
|
elif [ "$p" -eq 2 ]; then
|
|
row coverage "UNG rc=2 :: $(grep '^coverage' "$WORK/cov.out" | tail -n 1)"
|
|
ung=$((ung + 1))
|
|
else
|
|
row coverage "FAULT rc=$p :: $(grep '^coverage' "$WORK/cov.out" | tail -n 1)"
|
|
fail=$((fail + 1))
|
|
fi
|
|
|
|
# --- 3: the collected cells --------------------------------------------------
|
|
( cd "$BEAM" && python3 -m unittest test_tarjan_scc >"$WORK/cells.out" 2>&1 )
|
|
p=$?
|
|
if [ "$p" -eq 0 ] && grep -q '^Ran 8 tests' "$WORK/cells.out"; then
|
|
row cells "PASS $(grep '^Ran ' "$WORK/cells.out") $(tail -n 1 "$WORK/cells.out")"
|
|
pass=$((pass + 1))
|
|
elif [ "$p" -eq 2 ]; then
|
|
row cells "UNG rc=2 (the suite could not be collected)"
|
|
ung=$((ung + 1))
|
|
else
|
|
row cells "FAULT rc=$p (want 0, 8 cells)"
|
|
tail -n 5 "$WORK/cells.out"
|
|
fail=$((fail + 1))
|
|
fi
|
|
|
|
# --- 4: sensitivity, on a mutated copy ---------------------------------------
|
|
mkdir -p "$WORK/mut" && cp "$BEAM/tarjan_scc.py" "$BEAM/test_tarjan_scc.py" "$WORK/mut/" || exit 2
|
|
before="$(grep -c 'if lowlink\[u\] < lowlink\[parent\]:' "$WORK/mut/tarjan_scc.py")"
|
|
if [ "$before" -ne 1 ]; then
|
|
row mutant "FAULT mutation site matched $before line(s), want 1"
|
|
fail=$((fail + 1))
|
|
else
|
|
sed -i 's/if lowlink\[u\] < lowlink\[parent\]:/if False and lowlink[u] < lowlink[parent]:/' \
|
|
"$WORK/mut/tarjan_scc.py"
|
|
( cd "$WORK/mut" && python3 -m unittest test_tarjan_scc >"$WORK/mut.out" 2>&1 )
|
|
p=$?
|
|
if [ "$p" -eq 1 ] && grep -q '^FAILED (failures=' "$WORK/mut.out"; then
|
|
row mutant "PASS rc=1, $(tail -n 1 "$WORK/mut.out") on the dropped-lowlink copy"
|
|
pass=$((pass + 1))
|
|
elif [ "$p" -eq 2 ]; then
|
|
row mutant "UNG rc=2 (the mutated copy did not run)"
|
|
ung=$((ung + 1))
|
|
else
|
|
row mutant "FAULT rc=$p (want 1) -- the cells did not notice the mutation"
|
|
tail -n 5 "$WORK/mut.out"
|
|
fail=$((fail + 1))
|
|
fi
|
|
fi
|
|
|
|
# --- 5: the signed register, read through the block boundary ------------------
|
|
summary="$(python3 "$BLOCK" --file "$BASE" --marker "$MARK" 2>"$WORK/reg.err")"
|
|
p=$?
|
|
if [ "$p" -ne 0 ]; then
|
|
row register "FAULT rc=$p reading the block: $(tail -n 1 "$WORK/reg.err")"
|
|
fail=$((fail + 1))
|
|
else
|
|
names="$(python3 "$BLOCK" --file "$BASE" --marker "$MARK" --red \
|
|
| LC_ALL=C sort | tr '\n' ' ')"
|
|
want="CHECK-sol-profile-triage-2026-11-02 wizard-work/ledger/CHECK-wizardwork-census "
|
|
if [ "$summary" = "rows=21 red=2" ] && [ "$names" = "$want" ]; then
|
|
row register "PASS 21 rows, 2 known red: $names"
|
|
pass=$((pass + 1))
|
|
else
|
|
row register "FAULT $summary, red names: ${names:-none}"
|
|
fail=$((fail + 1))
|
|
fi
|
|
fi
|
|
|
|
# --- 6: the boundary's own selftest ------------------------------------------
|
|
python3 "$BLOCK" --selftest >"$WORK/scope.out" 2>&1
|
|
p=$?
|
|
if [ "$p" -eq 0 ] \
|
|
&& grep -qE 'selftest: [1-9][0-9]* cell\(s\), 0 failed, 0 skipped' "$WORK/scope.out"; then
|
|
row scope "PASS $(tail -n 1 "$WORK/scope.out")"
|
|
pass=$((pass + 1))
|
|
else
|
|
row scope "FAULT rc=$p (want 0) on the block reader's selftest"
|
|
tail -n 8 "$WORK/scope.out"
|
|
fail=$((fail + 1))
|
|
fi
|
|
|
|
echo
|
|
if [ "$ung" -gt 0 ]; then
|
|
echo "q159: $pass passed, $fail fault(s), $ung ungradable"
|
|
exit 2
|
|
elif [ "$fail" -gt 0 ]; then
|
|
echo "q159: $pass passed, $fail fault(s)"
|
|
exit 1
|
|
fi
|
|
echo "q159: 6 leg(s), all passed"
|
|
exit 0
|