Files
troupe-standup/wizard-work/ledger/CHECK
T
volt b9e3780b32 volt: Q71 (part 1/2) -- commits-table.md row 4 matches its source byte for byte, and the file is now graded by a re-fetching verifier wired into the lane gate
Q71's two faults at 6d936be, 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 at 6d936be naming 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.
2026-10-25 21:57:46 +00:00

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" "$@"