Q71's two faults at6d936be, both re-measured here: - Row 4's Subject read .../pub/scm/linux/kernel_git/mtd/linux where the source says .../pub/scm/linux/kernel/git/mtd/linux -- one character, inside a cited URL, at offset 68. 19 of 20 cells were exact; the fetch (HTTP 200, 33844 B, date header 2026-10-25T21:53:09Z) is retained as commits-table-feed-2026-10-25.json so the reading needs no network. - Nothing graded the file: no CHECK leg, no verifier, and the Source: line was the only thing tying it to its data. Fix: row 4 corrected, plus a graded Provenance: line carrying the response's own date header. New gate wizard-work/ledger/verify_commits_table.py reads the document's own Source: line, fetches that endpoint, and grades TABLE / RESOLVE / SUBJECT / DATE / ORDER / PROVENANCE with the tools/ exit contract (0 clean, 1 graded fault, 2 could not grade). RECENCY is observed, not graded, by default and --strict-recency promotes it -- a committed file cannot be abreast of a moving feed. No asserts, so -O cannot strip a check. Every path from __file__: git grep -c /root/troupe-standup on it is 0 (Q69 class, no second instance). CHECK gains it as leg 1 against the retained body, so the lane gate stays hermetic: bash wizard-work/ledger/CHECK rc 0, 1 line of output before this commit, 29 after (23 PASS + 4 INFO + the leg's summary), with the 20-commit leg unchanged. 23 control cells, all run (scratch/q71/controls.txt), 23/23 ok: rc 1 on the shipped pre-fix blob at6d936benaming SUBJECT at character 68; rc 1 for a swapped subject character, a date off by a day, a 6-char SHA prefix, a SHA prefix belonging to another row, a fabricated prefix, a dropped row, an inflated Rows: claim, an unescaped pipe, and three provenance mutations; rc 2 for an absent table, an absent feed, an HTML body, an empty array and an unresolvable host; rc 0 under python3 -O; rc 0 and rc 1 for the synthetic recency drift without and with --strict-recency. Live leg by hand: rc 0. Not claimed here: Q69 is unmoved (population unchanged, +1 file that names no author checkout); CHECK-git-history and verify.sh still carry the Q69 pin and are not this item's. Closure record and evidence doc land in the next commit.
22 lines
1.0 KiB
Bash
Executable File
22 lines
1.0 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# CHECK — ledger 20-commit-table (Extract lane) verification.
|
|
# Re-derives the table from git and diffs against commits.md/tsv/json/detail.tsv.
|
|
# Two legs: (1) commits-table.md against its retained response body, graded
|
|
# offline so the lane gate stays hermetic; (2) the 20-commit table re-derived
|
|
# from git. Exits 0 only when both legs pass.
|
|
set -u
|
|
OUT="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
cd "$OUT" || exit 1
|
|
|
|
# Leg 1 — commits-table.md (Q71). The verifier re-reads the document's own
|
|
# `Source:` line and normally fetches it; here it is pointed at the response
|
|
# body pinned at 2026-10-25T21:53:09Z (sha256 a7f55e4e...) so the gate needs no
|
|
# network and grades the commit rather than the author's tree. The live leg is
|
|
# `python3 verify_commits_table.py` with no --feed.
|
|
python3 "$OUT/verify_commits_table.py" \
|
|
--table "$OUT/commits-table.md" \
|
|
--feed "$OUT/commits-table-feed-2026-10-25.json" || exit 1
|
|
|
|
# Leg 2 — the 20-commit table.
|
|
exec python3 "$OUT/verify_commits_check.py" "$@"
|