Files

67 lines
2.4 KiB
Bash

#!/bin/bash
# CHECK-wizardwork-census -- verify the wizard-work census TSVs round-trip from the tree.
#
# Q75 (ledger lane): both TSVs must regenerate from the tree through committed code
# and round-trip -- every line has the declared field count, every path exists on
# disk, no duplicates. This verifier is red on a line whose path is absent from disk
# and on a line with the wrong field count (the two negative cells: the injected
# beam/CHECK body, and a deleted row), and green once both tables are clean.
#
# Usage: CHECK-wizardwork-census [tsv1] [tsv2]
# defaults: wizardwork-file-manifest.tsv wizardwork-census.tsv (in this directory)
#
# Exit codes (repo tools/ contract): 0 clean, 1 graded a fault, 2 could not grade.
set -euo pipefail
cd "$(dirname "$(readlink -f "$0")")"
ROOT="$(pwd)/.." # wizard-work dir, parent of ledger/
TSV1="${1:-wizardwork-file-manifest.tsv}"
TSV2="${2:-wizardwork-census.tsv}"
python3 - "$ROOT" "$TSV1" "$TSV2" <<'PY'
import os, sys
from pathlib import Path
root = Path(sys.argv[1]).resolve()
if not root.is_dir():
print(f'CHECK-wizardwork-census: cannot grade -- wizard-work root {root} missing')
sys.exit(2)
fails = []
tables = 0
for tsv in sys.argv[2:]:
p = Path(tsv)
if not p.is_absolute():
p = Path.cwd() / p
if not p.is_file():
print(f'CHECK-wizardwork-census: cannot grade -- {p} missing')
sys.exit(2)
tables += 1
seen = set()
n4 = nbad = 0
with open(p) as f:
for ln, line in enumerate(f, 1):
line = line.rstrip('\n')
if not line:
continue
parts = line.split('\t')
if len(parts) != 4:
nbad += 1
fails.append(f'{p.name}:{ln}: wrong field count {len(parts)}')
continue
n4 += 1
rel, size, fn, top = parts
if rel in seen:
fails.append(f'{p.name}:{ln}: duplicate path {rel}')
seen.add(rel)
if not (root / rel).exists():
fails.append(f'{p.name}:{ln}: absent path {rel}')
print(f'{p.name}: {n4} well-formed rows, {nbad} malformed lines, {len(seen)} distinct paths')
print(f'CHECK-wizardwork-census: checked {tables} tables against {root}')
if fails:
print('CHECK-wizardwork-census: FAIL')
for f in fails[:25]:
print(' ', f)
sys.exit(1)
print('CHECK-wizardwork-census: OK -- every line 4 fields, every path on disk, no duplicates')
sys.exit(0)
PY