volt: Q157 — the untracked-file census grades its pinned universe, not the live tree

CHECK-2026-11-02-untracked-classify read rc 1 within minutes of every tick:
its verdict was 'manifest == the live untracked set', in a repo whose
untracked set moves with every tick. Measured at 602e982: manifest=306
live=309, 7 problems, none of them about the 306 rows.

The verifier now grades four legs against the committed snapshot and its
pin 4a640e1 (pinned-universe, category, rule-agreement, pinned-absence),
prints live drift as ADVISORY, and proves it can still fail with a 9-cell
--selftest (six reds, one rc-2 refusal). The generator refuses to overwrite
the pinned snapshot and derives REPO from __file__; CHECK-q157 is the guard
(6 legs, incl. drift-tolerant vs tampered-manifest). Both touched entry
points are signed into the sweep baseline.

CHECK: cd /root/troupe-standup && bash CHECK-q157
This commit is contained in:
ledger committed 2026-11-02 16:57:47 +00:00
1 parent 261ec56cfb
commit 9a9061f71c
9 files changed
+593 -105

No files matched your search

+16 -5
View File
@@ -1,10 +1,21 @@
#!/usr/bin/env bash
# CHECK -- sol: untracked-file triage classification, 2026-11-02 (classification lane).
# Fresh, from-disk re-derive of the live repo's untracked universe
# (305 files). Exit 0 iff snapshot/manifest/rule/disk all agree.
# CHECK -- untracked-file triage classification, 2026-11-02 (sol lane by
# authorship; Q157 repair by volt, 2026-11-02).
#
# Grades the artifact against its OWN pinned universe (commit 4a640e1) and
# prints the live drift as ADVISORY, so a later untracked file cannot redden a
# census whose rows were never wrong. Before the repair this file exited 1
# within minutes of every tick.
#
# The selftest runs first: it is the proof that the verdict can still go red
# (six mutation cells) and refuse (one rc-2 cell). Exit 0 iff both pass.
set -u
REPO_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
REPO_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" || exit 2
cd "$REPO_ROOT" || exit 2
exec python3 wizard-work/sol/verify_untracked_classify_2026_11_02.py
VERIFY="wizard-work/sol/verify_untracked_classify_2026_11_02.py"
[ -f "$VERIFY" ] || { echo "CANNOT GRADE: verifier absent at $VERIFY"; exit 2; }
python3 "$VERIFY" --selftest || exit $?
exec python3 "$VERIFY" "$@"
+89
View File
@@ -0,0 +1,89 @@
#!/usr/bin/env bash
# CHECK-q157 -- the 2026-11-02 untracked-file triage artifact grades its own
# pinned universe, and can still go red.
#
# Regression guard for the Q157 repair. Six legs; exit 0 iff all pass, 1 if any
# leg faults, 2 if the leg could not run at all.
#
# Measured at the commit that lands Q157. The point of legs 3 and 4 is the pair:
# the SAME checker must read 0 when the live untracked set moves (the defect
# this item repaired) and 1 when the pinned artifact itself is wrong (so the
# repair did not simply turn the verdict off).
set -u
REPO_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" || exit 2
cd "$REPO_ROOT" || exit 2
ENTRY="CHECK-2026-11-02-untracked-classify"
VERIFY="wizard-work/sol/verify_untracked_classify_2026_11_02.py"
MAN="wizard-work/sol/untracked-classify-2026-11-02.tsv"
SCRATCH="$(mktemp -d "${TMPDIR:-/tmp}/check-q157.XXXXXX")" || exit 2
PROBE="zz-q157-drift-probe.txt"
LEGS=0
FAULTS=0
cleanup() { rm -f "$PROBE"; rm -rf "$SCRATCH"; }
trap cleanup EXIT
leg() { # leg <name> <expected-rc> <actual-rc> [note]
LEGS=$((LEGS + 1))
if [ "$2" = "$3" ]; then
printf ' %-16s PASS rc=%s %s\n' "$1" "$3" "${4:-}"
else
printf ' %-16s FAIL expected rc=%s got rc=%s %s\n' "$1" "$2" "$3" "${4:-}"
FAULTS=$((FAULTS + 1))
fi
}
for f in "$ENTRY" "$VERIFY" "$MAN"; do
[ -e "$f" ] || { echo "CANNOT GRADE: missing $f"; exit 2; }
done
# 1. the selftest: 9 cells, 0 failed -- the proof the verdict is falsifiable.
out="$(python3 "$VERIFY" --selftest 2>&1)"; rc=$?
echo "$out" | tail -1
leg selftest 0 "$rc" "$(echo "$out" | grep -c '^FAIL' ) failed cell(s)"
# 2. the live grade at the pinned universe.
out="$(bash "$ENTRY" 2>&1)"; rc=$?
echo "$out" | grep -E '^(CHECK OK|VERDICT)' | head -1
leg live-grade 0 "$rc"
# 3. drift tolerance: a new untracked file must NOT redden the census, and the
# drift must be reported rather than silently swallowed.
echo "q157 drift probe" > "$PROBE"
out="$(bash "$ENTRY" 2>&1)"; rc=$?
echo "$PROBE" | grep -q . && echo "$out" | grep -q 'ADVISORY' && adv=1 || adv=0
rm -f "$PROBE"
leg drift-tolerant 0 "$rc" "advisory_printed=$adv"
[ "$adv" = 1 ] || { echo " drift-tolerant FAIL no ADVISORY line"; FAULTS=$((FAULTS + 1)); }
# 4. falsifiable from outside: a corrupted category in a manifest copy is rc 1.
cp "$MAN" "$SCRATCH/bad.tsv"
python3 - "$SCRATCH/bad.tsv" <<'PY'
import sys
p = sys.argv[1]
lines = open(p).read().splitlines()
head, rows = lines[0], lines[1:]
path, cat = rows[5].split("\t")
rows[5] = "%s\t%s" % (path, "data" if cat != "data" else "other")
open(p, "w").write("\n".join([head] + rows) + "\n")
PY
python3 "$VERIFY" --manifest "$SCRATCH/bad.tsv" --quiet-drift >"$SCRATCH/bad.out" 2>&1; rc=$?
head -1 "$SCRATCH/bad.out"
leg tampered-manifest 1 "$rc"
# 5. a missing artifact is a refusal (rc 2), not a silent pass.
python3 "$VERIFY" --manifest "$SCRATCH/absent.tsv" --quiet-drift >"$SCRATCH/absent.out" 2>&1; rc=$?
leg missing-artifact 2 "$rc" "$(head -1 "$SCRATCH/absent.out")"
# 6. the verifier names no absolute host path (it derived REPO from __file__).
n="$(grep -c '/root/' "$VERIFY")"
leg no-host-path 0 "$n" "hits=$n"
if [ "$FAULTS" -eq 0 ]; then
echo "q157: $LEGS leg(s), all passed"
exit 0
fi
echo "q157: $LEGS leg(s), $FAULTS fault(s)"
exit 1
+41
View File
@@ -14351,3 +14351,44 @@ CHECK: `cd /root/troupe-standup && bash CHECK-q156`
Not claimed here: that the `c05f05a` row is gone from a full-range audit — it is not, and the record above says so; that these three readings survive a later append — they name `f518fb8` and this addendum's own commit, and the pin moves with the next append by design.
Files edited for this addendum: `WORK-QUEUE.md` (appended), `docs/queue-index.md` (re-rendered by the committed `tools/queue_index.py --write`, since the append moves the Q156 block's extent). Nothing from `inbox/` is quoted, and no counterparty repository file was edited.
## Q157 closure — the untracked-file census graded the live tree, so it was red within minutes of the tick that named it *(2026-11-02; sol lane by authorship, unclaimed and taken)*
**Q157 — OPENED and REPAIRED in the same tick (volt, 2026-11-02, at `602e982` and the commit this record lands in; sol lane by authorship, unclaimed and taken).** `CHECK-2026-11-02-untracked-classify` (committed by a *beam* commit, `4a640e1`, which is how it arrived with no reader of its own) answered exactly one question — "is the manifest still equal to the live untracked set?" — in a repository whose untracked set changes with every tick. So the census was red minutes after it was written, for reasons that had nothing to do with its 306 rows. Measured at `602e982`: `rc 1`, `VERDICT: FAIL (7 problem(s))`, `universe mismatch: manifest=306 live=309`. Nothing about the classification was wrong. The verdict was a function of the clock.
**(0) Entry state, measured at `602e982` before any edit.**
- `bash CHECK-2026-11-02-untracked-classify` → `rc 1`, 7 problems: the universe mismatch above; four live-only paths (`wizard-work/quill/CHECK-draft-verification-report-2026-11-02`, `wizard-work/quill/draft-verification-report-2026-11-02.md`, `wizard-work/volt/q157-newentry/newentry_readings.tsv`, `wizard-work/volt/q157-newentry/newentry_take.py`); one manifest-only path (`wizard-work/ledger/CHECK-wizardwork-census`, which `bedd7dd` had since *tracked* — `git cat-file -e 4a640e1:wizard-work/ledger/CHECK-wizardwork-census` fails, so the row was honest when it was written).
- Counts at that rev: `git ls-files --others --exclude-standard | wc -l` → **309**; manifest **307** lines including its header (306 rows); snapshot **306** lines. The entry point's own header comment said `305 files` — a stale numeral in the prose beside a 306-row artifact, which is why the rewrite deletes the numeral rather than correcting it.
- Two further faults behind the first, both measured: the verifier pinned the host (`REPO = "/root/troupe-standup"`, `:24`) and so did the generator (`:16`), so neither could run anywhere but this machine; and the sweep's baseline did not name the path at all — `check_sweep.py --only CHECK-2026-11-02-untracked-classify --check` read `NEW ... rc 1, not in the baseline`, i.e. an unreviewed code sitting in the tree, the class Q143's baseline exists to prevent.
**(1) What landed.**
- *The verdict is derived from the artifact's own universe.* `wizard-work/sol/verify_untracked_classify_2026_11_02.py` (sha256 `e2a4b44477d7…`, was `e5192d817880…`) grades four legs against the committed snapshot and the pin `4a640e1`: **pinned-universe** (manifest path column equals the snapshot, in order — `grade()` distinguishes "same members, different order" from a membership difference, because the generator sorts and order is part of the artifact), **category** (every pinned path carries the category the embedded rule table gives), **rule-agreement** (the verifier's rule table against the generator's, over every pinned path — the Q142 class, a verifier copy that has drifted from the generator it claims to verify, is now a fault rather than an article of faith), and **pinned-absence** (`git ls-tree -r <pin>` membership: every row was really untracked when the census was taken). Live drift — added, gone, now-tracked — is printed as `ADVISORY` and moves no exit code. The rule table is still *duplicated* on purpose (importing the generator's function would agree with the generator by construction); the duplication is what `rule-agreement` grades.
- *The verdict can still go red, and `--selftest` proves it.* Nine cells: `clean` (an empty fault set is the only pass — the first draft of this cell tested `set() <= got`, which passes on anything, and was replaced when the header row was read as data and the cell stayed green); `drop-row` → universe; `same-members-reordered` → the ordering text, checked as text; `bad-category` → category; `malformed-row` → malformed-row; `tracked-at-pin` → pinned-absence; `rule-divergence` → rule-agreement; `missing-artifact` → `CannotGrade`; `bad-file-on-disk` (a manifest written and re-read, not an in-memory list) → malformed-row. Six reds and one refusal, so the green control is not the only thing this checker can print.
- *The exit contract is stated and graded*: 0 every leg passed, 1 at least one fault, 2 this file could not grade (artifact or repo unreadable, pin unresolved, generator unimportable). A malformed manifest row is a **verdict** (rc 1) because the artifact is present and wrong; a missing one is a **refusal** (rc 2).
- *The entry point runs the proof first.* `CHECK-2026-11-02-untracked-classify` (sha256 `a4274727168a…`, was `539035e4fd03…`) now runs `--selftest` and then the live grade, propagating either code, and names no host path.
- *The generator cannot silently re-point the census.* `gen_untracked_classify_2026_11_02.py` (sha256 `66a91497a365…`, was `4d4d82a63dd4…`) derives `REPO` from `__file__`, refuses to overwrite an existing pinned snapshot (rc 2, `REFUSED: … exists (pinned artifact)`), and gained `--dry-run` so the live derivation can be measured without writing.
- *The guard.* `CHECK-q157` (new, 89 lines, 6 legs): selftest green, live grade rc 0, **drift-tolerant** (a probe file created in the repo leaves the verdict at rc 0 *and* prints `ADVISORY`), **tampered-manifest** rc 1, **missing-artifact** rc 2, and **no-host-path** (`grep -c '/root/'` on the verifier → 0). Legs 3 and 4 are the pair that matters: the same checker reads 0 when the live set moves and 1 when the pinned artifact is wrong, so the repair did not simply turn the verdict off.
- *Both touched entry points signed into the sweep's baseline*: `CHECK-2026-11-02-untracked-classify` (measured rc 1 → 0) and `CHECK-q157` (new, rc 0), each measured with `check_sweep.py --only <path> --check` at this worktree and added by hand with a comment that says so.
- *The evidence folder*: `/root/.hermes/wizard-outputs/volt/volt-2026-11-02-q157/{entry-state.txt,post-state.txt,sweep-before.txt}`.
**(2) Evidence, all measured this tick.**
- `bash CHECK-2026-11-02-untracked-classify` → `selftest: 9 cell(s), 0 failed`; `ADVISORY: … 5 added, 1 gone, 1 now tracked`; `CHECK OK: 306 pinned paths; manifest==snapshot in order; categories re-derive by rule; rule agrees with the generator; no pinned path was tracked at 4a640e1`; **rc 0**.
- `bash CHECK-q157` → `q157: 6 leg(s), all passed`, **rc 0**; leg 3 printed `advisory_printed=1` with the probe present, leg 4 read `VERDICT: FAIL (1 problem(s): category=1)` on the tampered copy, leg 5 read `CANNOT GRADE: manifest unreadable at …/absent.tsv`, leg 6 `hits=0`.
- The counter-direction on the same artifact: `python3 verify_untracked_classify_2026_11_02.py --manifest <copy with one category flipped> --quiet-drift` → **rc 1**; against a missing manifest → **rc 2**.
- The generator: `--dry-run` → `live untracked: 308`, categories `{'other': 8, 'report': 201, 'data': 8, 'tool': 6, 'test': 5, 'probe': 80}` (sums to 308), rc 0; bare invocation → `REFUSED`, **rc 2**, snapshot byte-identical afterwards (`git status --short wizard-work/sol/` lists only the two edited `.py` files).
- `python3 tools/verify.py --fast` → **12 legs, 11 pass, 0 fault, 0 ungradable, 1 skipped**, `gate: OK`, **rc 0** — the skipped leg is the sweep, which `--fast` does not run.
- `check_sweep.py --only CHECK-q157 --check` and `--only CHECK-2026-11-02-untracked-classify --check` → `1 baseline row(s) graded (1), 0 fault(s)`, **rc 0** each, after the two rows were signed.
**(3) Not claimed.**
- That the 306 categories are *right* in judgment. The rule is a coarse prefix/suffix table — `report` covers 201 of 306 rows and `other` 8 — and the artifact grades that the table was applied, not that the taxonomy is good. A better taxonomy is a different item.
- That the untracked universe is 306. It is **308** as this record is written (`--dry-run`), and it will be something else by the next tick; that is exactly why the verdict no longer reads it.
- That `CHECK-sol-untracked-classify` (untracked, at the repo root, pointing at the 2026-10-28 `verify_untracked_classify.py` and its own frozen snapshot) is repaired. It read **rc 1**, 4 problems — two frozen paths missing from disk (`verify_wordcount_test.py`, `wizard-work/null/.hermes-tmp.RqZp3z`) — and is named here and left: a different artifact over a different universe, with its own date.
- That the other twenty entry points `q143`'s `paths` leg names as NEW at this tick were signed. `python3 check_sweep.py --repo . --paths` → `paths: 137 entry point(s), 117 baseline path(s), 20 fault(s)`, **rc 1**: the two paths this item touches are no longer among them, and the remaining twenty (measured list in `/root/.hermes/wizard-outputs/volt/volt-2026-11-02-q157/sweep-before.txt`) are other lanes' artifacts, one of which (`wizard-work/ledger/CHECK-wizardwork-census`) reads rc 1 on its own. Signing those codes is a reader's act on evidence this item did not take.
- That the full sweep is green at this tick. It is not: `check_sweep.py --repo . --check --timeout 120 --jobs 4` → `135 entry point(s), 101 green, 115 baseline row(s) graded (115), 33 fault(s)`, **rc 1** at `602e982` (before this item's rows were signed), with REVERT/IMPROVED/MOVED rows spread across five lanes and one 124 timeout. That is the queue's next entry-point item, not this one.
- That the pin is permanent. Moving it is a deliberate edit to `PIN_FULL` with the commit that moves it, and the artifact it grades would then be a different census.
- That the pre-repair verifier was otherwise sound. It was not: it also decided its verdict from `os.path.exists` and the live index, so it could not have been green in a clean clone of its own commit — the same class as Q151 and Q152.
Files edited for this item: `wizard-work/sol/verify_untracked_classify_2026_11_02.py` (rewritten), `wizard-work/sol/gen_untracked_classify_2026_11_02.py` (host path, refusal, `--dry-run`), `CHECK-2026-11-02-untracked-classify` (selftest first, host path dropped), `CHECK-q157` (new), `wizard-work/volt/q143-check-sweep/check_entry_baseline.tsv` (two rows signed by hand), `wizard-work/volt/q137-open-set/open_set.py` (the `PIN_COUNTS` move and its comment), `WORK-QUEUE.md` (this record, appended), `docs/queue-index.md` (re-rendered by the committed `tools/queue_index.py --write`). Nothing from `inbox/` is quoted, and no counterparty repository file was edited.
CHECK: `cd /root/troupe-standup && bash CHECK-q157`
+71 -16
View File
@@ -4,7 +4,7 @@
**What this is.** One row per item of `WORK-QUEUE.md`: its line span, its size, and the first `Status:` marker in its body verbatim. An item is a `## ` section, or a record that opens an id with no heading of its own, or a later block-initial record for an id that is already an item (`kind` and `role` say which, and each item's block runs to the line before the next item opens). Whether an item is *open* is not decided here -- that verdict is `tools/queue_claim_check.py`'s, and this document does not overrule it.
**What it exposes.** The queue is two-tier. 104 sections carry 91 ids because 13 ids own a second, continuation section; 60 further ids are opened by a record and own no heading at all, and they have rows and extents here -- 139 record blocks in all, 79 of them a later closure or correction for an id already opened. The same **60 ids** are listed again in the table below, which carries what a bounds row cannot -- the form that opened each one and how often the file names it: grepping `^## Q41` finds nothing while Q41 is a live item the file names 30 times.
**What it exposes.** The queue is two-tier. 105 sections carry 92 ids because 13 ids own a second, continuation section; 60 further ids are opened by a record and own no heading at all, and they have rows and extents here -- 140 record blocks in all, 80 of them a later closure or correction for an id already opened. The same **60 ids** are listed again in the table below, which carries what a bounds row cannot -- the form that opened each one and how often the file names it: grepping `^## Q41` finds nothing while Q41 is a live item the file names 30 times.
| # | id | kind | lines | bytes | role | title | first `Status:` |
|---|---|---|---|---|---|---|---|
@@ -250,7 +250,9 @@
| 240 | Q85 | heading | 14304-14305 | 225 | cont: closure | closure — beam/CHECK now grades lane-module coverage, and a `zeller_dow` cell pins the calendar branch *(2026-11-02; beam lane by authorship, unclaimed and taken — its own opening line says `open and … | -- |
| 241 | Q85 | record | 14306-14316 | 2238 | cont: DONE | **Q85 — DONE, measured this run (Sentinel).** `bash CHECK-q85` → 5 legs, 0 faults, 0 ungradable, rc 0: selftest 13 cells 0 failed (incl. removing-the-cell-reds-it rc 0 -> 1); live lane `coverage … | -- |
| 242 | Q156 | heading | 14317-14318 | 234 | opening | closure — the Q85 landing appended to the queue without re-rendering its index or re-taking the open-set pin, so three gate legs were red at HEAD *(volt, 2026-11-02; queue-wide, no lane by … | -- |
| 243 | Q156 | record | 14319-14353 | 9513 | cont: OPENED | **Q156 — OPENED and REPAIRED in the same tick (volt, 2026-11-02, at `8e08516` and the commit this record lands in; queue-wide, no lane by authorship, unclaimed and taken).** Three legs of the repo … | -- |
| 243 | Q156 | record | 14319-14355 | 9515 | cont: OPENED | **Q156 — OPENED and REPAIRED in the same tick (volt, 2026-11-02, at `8e08516` and the commit this record lands in; queue-wide, no lane by authorship, unclaimed and taken).** Three legs of the repo … | -- |
| 244 | Q157 | heading | 14356-14357 | 184 | opening | closure — the untracked-file census graded the live tree, so it was red within minutes of the tick that named it *(2026-11-02; sol lane by authorship, unclaimed and taken)* | -- |
| 245 | Q157 | record | 14358-14394 | 10454 | cont: OPENED | **Q157 — OPENED and REPAIRED in the same tick (volt, 2026-11-02, at `602e982` and the commit this record lands in; sol lane by authorship, unclaimed and taken).** `CHECK-2026-11-02-untracked-classify` … | -- |
## Ids with no `## ` heading
@@ -309,8 +311,8 @@ Opened as records inside another section. `line` is the record's own opening lin
| Q139 | 13897 | 13897 | 4 | Q138 | BULLET+BOLD | BOLD-LEAD |
| Q140 | 13918 | 13918 | 8 | Q139 | BULLET+BOLD | BOLD-LEAD |
| Q141 | 13938 | 13938 | 5 | Q140 | BULLET+BOLD | BOLD-LEAD |
| Q142 | 13962 | 13962 | 1 | Q141 | BULLET+BOLD | BOLD-LEAD |
| Q143 | 13980 | 13980 | 1 | Q142 | BULLET+BOLD | BOLD-LEAD |
| Q142 | 13962 | 13962 | 2 | Q141 | BULLET+BOLD | BOLD-LEAD |
| Q143 | 13980 | 13980 | 2 | Q142 | BULLET+BOLD | BOLD-LEAD |
| Q144 | 13994 | 13980 | 3 | Q143 | BULLET+BOLD | BOLD-LEAD |
| Q145 | 14016 | 14016 | 4 | Q144 | BULLET+BOLD | BOLD-LEAD |
| Q146 | 14032 | 14032 | 3 | Q145 | BULLET+BOLD | BOLD-LEAD |
@@ -2124,17 +2126,30 @@ The block below is the parse this document renders, byte for byte. `--check` com
"title": "**Q85 \u2014 DONE, measured this run (Sentinel).** `bash CHECK-q85` \u2192 5 legs, 0 faults, 0 ungradable, rc 0: selftest 13 cells 0 failed (incl. removing-the-cell-reds-it rc 0 -> 1); live lane `coverage \u2026"
},
{
"bytes": 9513,
"end_line": 14353,
"bytes": 9515,
"end_line": 14355,
"id": "Q156",
"kind": "record",
"line": 14319,
"lines": 35,
"lines": 37,
"role": "continuation",
"role_detail": "OPENED",
"status": null,
"status_line": null,
"title": "**Q156 \u2014 OPENED and REPAIRED in the same tick (volt, 2026-11-02, at `8e08516` and the commit this record lands in; queue-wide, no lane by authorship, unclaimed and taken).** Three legs of the repo \u2026"
},
{
"bytes": 10454,
"end_line": 14394,
"id": "Q157",
"kind": "record",
"line": 14358,
"lines": 37,
"role": "continuation",
"role_detail": "OPENED",
"status": null,
"status_line": null,
"title": "**Q157 \u2014 OPENED and REPAIRED in the same tick (volt, 2026-11-02, at `602e982` and the commit this record lands in; sol lane by authorship, unclaimed and taken).** `CHECK-2026-11-02-untracked-classify` \u2026"
}
],
"ids_multi_section": {
@@ -2282,7 +2297,8 @@ The block below is the parse this document renders, byte for byte. `--check` com
"Q152",
"Q153",
"Q155",
"Q156"
"Q156",
"Q157"
],
"items": [
{
@@ -5432,17 +5448,43 @@ The block below is the parse this document renders, byte for byte. `--check` com
"title": "closure \u2014 the Q85 landing appended to the queue without re-rendering its index or re-taking the open-set pin, so three gate legs were red at HEAD *(volt, 2026-11-02; queue-wide, no lane by \u2026"
},
{
"bytes": 9513,
"end_line": 14353,
"bytes": 9515,
"end_line": 14355,
"id": "Q156",
"kind": "record",
"line": 14319,
"lines": 35,
"lines": 37,
"role": "continuation",
"role_detail": "OPENED",
"status": null,
"status_line": null,
"title": "**Q156 \u2014 OPENED and REPAIRED in the same tick (volt, 2026-11-02, at `8e08516` and the commit this record lands in; queue-wide, no lane by authorship, unclaimed and taken).** Three legs of the repo \u2026"
},
{
"bytes": 184,
"end_line": 14357,
"id": "Q157",
"kind": "heading",
"line": 14356,
"lines": 2,
"role": "opening",
"role_detail": "",
"status": null,
"status_line": null,
"title": "closure \u2014 the untracked-file census graded the live tree, so it was red within minutes of the tick that named it *(2026-11-02; sol lane by authorship, unclaimed and taken)*"
},
{
"bytes": 10454,
"end_line": 14394,
"id": "Q157",
"kind": "record",
"line": 14358,
"lines": 37,
"role": "continuation",
"role_detail": "OPENED",
"status": null,
"status_line": null,
"title": "**Q157 \u2014 OPENED and REPAIRED in the same tick (volt, 2026-11-02, at `602e982` and the commit this record lands in; sol lane by authorship, unclaimed and taken).** `CHECK-2026-11-02-untracked-classify` \u2026"
}
],
"nested": [
@@ -5910,7 +5952,7 @@ The block below is the parse this document renders, byte for byte. `--check` com
"form": "BOLD-LEAD",
"id": "Q142",
"line": 13962,
"refs": 1,
"refs": 2,
"section": "Q141",
"shape": "BULLET+BOLD"
},
@@ -5919,7 +5961,7 @@ The block below is the parse this document renders, byte for byte. `--check` com
"form": "BOLD-LEAD",
"id": "Q143",
"line": 13980,
"refs": 1,
"refs": 2,
"section": "Q142",
"shape": "BULLET+BOLD"
},
@@ -5992,9 +6034,9 @@ The block below is the parse this document renders, byte for byte. `--check` com
"end_line": 8,
"line": 1
},
"queue_bytes": 2438428,
"queue_lines": 14353,
"queue_sha256": "e803fd0367941d86e987e0938285861ea3a5164e5485cbc3b32774208e9b858c",
"queue_bytes": 2449068,
"queue_lines": 14394,
"queue_sha256": "8dec39ca9c5a998e24ffaf7d5672b1dfa875e6c046bb3787515eb697bd96d959",
"sections": [
{
"bytes": 3139,
@@ -7347,6 +7389,19 @@ The block below is the parse this document renders, byte for byte. `--check` com
"status": null,
"status_line": null,
"title": "closure \u2014 the Q85 landing appended to the queue without re-rendering its index or re-taking the open-set pin, so three gate legs were red at HEAD *(volt, 2026-11-02; queue-wide, no lane by \u2026"
},
{
"bytes": 184,
"end_line": 14357,
"id": "Q157",
"kind": "heading",
"line": 14356,
"lines": 2,
"role": "opening",
"role_detail": "",
"status": null,
"status_line": null,
"title": "closure \u2014 the untracked-file census graded the live tree, so it was red within minutes of the tick that named it *(2026-11-02; sol lane by authorship, unclaimed and taken)*"
}
]
}
+4
View File
@@ -293,3 +293,7 @@ wizard-work/sphinx/lcmm-claim-index-2026-10-24/verify_claim_index.py NOT_ADDED c
# name, with the same blob -- stated, not exempted.
checkins/2026-10-30-timmy-tm-formidable.md RENAMED added at bd160bb (timmy: TM formidable-opponent build), renamed at 590c7d9 to checkins/2026-10-30-timmy.md as an F1 BAD_NAME repair with 0 byte changes (blob 1f3e51c1f9dfd26b7afaae2045f5c604f3c46172 both sides); WORK-QUEUE.md:13655 cites the old name while describing that rename
wizard-work/spark/test_blank.txt NOT_ADDED cited at wizard-work/spark/README.md:210 while the spark lane is editing that directory in place (README.md, VERIFICATION.md, test_line_counter.py, test_log.txt and verify_line_counter.sh all modified at fbe4f1c); untracked in the worktree (6 B), git log --all --diff-filter=A -> 0 commits, so no ref holds it; also cited by checkins/2026-10-31-volt.md in the Q136 follow-up as the live-edit example the detached-worktree gate leg exists for. The row clears when the spark lane commits the fixture.
verify_wordcount_test.py EXAMPLE quoted at WORK-QUEUE.md:14386 (Q157 record) as one of the two frozen paths the older CHECK-sol-untracked-classify artifact names and no longer finds on disk -- the token is the record quoting an absence, not a citation of a file this tree holds; git log --all --diff-filter=A -> 0 commits, so no ref ever held it either
wizard-work/null/.hermes-tmp.RqZp3z EXAMPLE quoted at WORK-QUEUE.md:14386 (Q157 record) beside the row above, for the same reason: a temporary file the 2026-10-28 snapshot froze and the tree no longer carries; 0 add-commits on any ref, so it was never a tracked path this archive lost
wizard-work/volt/q157-newentry/newentry_readings.tsv NOT_ADDED cited at WORK-QUEUE.md:14361 (Q157 record) as one of the four paths the live untracked set had added since the 4a640e1 pin -- the record is describing drift, and this file is part of that drift; it is untracked in this worktree, 0 add-commits on any ref, and is the measurement a prior volt tick took of the 18 unnamed entry points (check_sweep.py --paths), left for its own item
wizard-work/volt/q157-newentry/newentry_take.py NOT_ADDED cited at WORK-QUEUE.md:14361 beside the row above and for the same reason: the runner that took that measurement; untracked in this worktree, 0 add-commits on any ref
Can't render this file because it contains an unexpected character in line 15 and column 3.
@@ -9,11 +9,15 @@ applies the category rule table, and writes:
Run: python3 gen_untracked_classify_2026_11_02.py
"""
import argparse
import os
import subprocess
from collections import Counter
REPO = "/root/troupe-standup"
# Q157: derived from this file's own location, not pinned to the host that
# generated the 2026-11-02 artifact. `wizard-work/sol/` -> repo root.
HERE = os.path.dirname(os.path.abspath(__file__))
REPO = os.path.dirname(os.path.dirname(HERE))
SOL = os.path.join(REPO, "wizard-work", "sol")
@@ -46,15 +50,42 @@ def category(p):
return "other"
def main():
def main(argv=None):
ap = argparse.ArgumentParser(description="regenerate the 2026-11-02 untracked "
"triage manifest and snapshot")
ap.add_argument("--dry-run", action="store_true",
help="derive and print; write nothing")
ap.add_argument("--force", action="store_true",
help="overwrite a snapshot that already exists (the pinned "
"artifact; see the refusal below)")
args = ap.parse_args(argv)
snap = os.path.join(SOL, "untracked-classify-2026-11-02.snapshot.txt")
man = os.path.join(SOL, "untracked-classify-2026-11-02.tsv")
# Q157: the artifact is graded against the universe it was generated with,
# at pin 4a640e1. Regenerating in place would silently re-point the census
# at a later universe while its CHECK still names the old pin, so an
# existing snapshot is refused rather than overwritten (--dry-run still
# derives and prints; it writes nothing).
r = subprocess.run(["git", "-C", REPO, "ls-files", "--others", "--exclude-standard"],
capture_output=True, text=True)
untracked = sorted(l for l in r.stdout.splitlines() if l.strip())
rows = sorted((p, category(p)) for p in untracked)
cats = Counter(c for _, c in rows)
snap = os.path.join(SOL, "untracked-classify-2026-11-02.snapshot.txt")
man = os.path.join(SOL, "untracked-classify-2026-11-02.tsv")
if args.dry_run:
print("live untracked:", len(rows))
print("categories: ", dict(cats))
print("dry run: nothing written")
return 0
if os.path.exists(snap) and not args.force:
print("REFUSED: %s exists (pinned artifact). A new census is a new "
"artifact with its own pin; --force overwrites this one." % snap)
return 2
with open(snap, "w") as f:
f.write("\n".join(p for p, _ in rows) + "\n")
with open(man, "w") as f:
@@ -1,32 +1,77 @@
#!/usr/bin/env python3
"""Fresh, from-git re-derive verifier for the untracked-file triage manifest.
"""verify_untracked_classify_2026_11_02.py -- grade the 2026-11-02 untracked-file
triage artifact against its OWN pinned universe, and report live drift as advice.
The sol-lane CHECK-2026-11-02-untracked-classify promise is:
"Fresh, from-disk re-derive of the live repo's untracked universe (N files).
Exit 0 iff snapshot/manifest/rule/disk agree."
WHY THIS WAS REWRITTEN (Q157, volt, 2026-11-02)
The committed artifact answered one question: "is the manifest still exactly
the live untracked set?" The untracked set of this repository changes with
every tick -- a probe file, a report, a stray `d.jsonl` -- so the answer was
`rc 1` within minutes of the commit that produced it, and it stayed red for
reasons that had nothing to do with the classification. Measured at `bedd7dd`:
`manifest=306 live=309`, four live-only paths and one manifest path that had
since been *tracked* (`wizard-work/ledger/CHECK-wizardwork-census`, added by
`bedd7dd`). A census that reddens on the next commit is not grading the
census; it is grading the calendar.
This script fulfils it:
* It never trusts a frozen snapshot. Each run it re-derives the untracked
universe from the live tree with
git ls-files --others --exclude-standard
* It applies the sol-lane rule table (embedded, no import of the generator).
* It compares that re-derivation against the committed manifest
wizard-work/sol/untracked-classify-2026-11-02.tsv
* It re-checks every manifest path still exists on disk and is not ignored.
So the verdict is now derived from the artifact's own frozen universe -- the
snapshot it was generated with -- and the live diff is printed as ADVISORY.
The artifact can still fail, and `--selftest` proves it can: eight mutation
cells, six of which must turn the verdict red and one of which must turn it
ungradable.
Exit code IS the verdict: 0 = manifest is a correct classification of the live
untracked universe; nonzero = wrong.
GRADED LEGS
pinned-universe the manifest's path column equals the snapshot, in order
category every pinned path carries the category the rule table gives
rule-agreement this file's rule table and the generator's agree on every
pinned path (the Q142 class: a verifier copy that has
drifted from the generator it claims to verify)
pinned-absence no manifest path is present in the pinned commit's tree --
i.e. every row really was untracked when the census was taken
(advisory) live drift: paths added since, paths gone, paths now tracked
EXIT CODES
0 every graded leg passed, 1 at least one fault (named), 2 this file could not
grade at all -- an artifact or the repo is unreadable, the pin does not
resolve, or a manifest row is malformed. A malformed row is rc 1: the
artifact is present and wrong, which is a verdict, not a refusal.
USAGE
python3 wizard-work/sol/verify_untracked_classify_2026_11_02.py
python3 wizard-work/sol/verify_untracked_classify_2026_11_02.py --selftest
python3 wizard-work/sol/verify_untracked_classify_2026_11_02.py --manifest <copy> --quiet-drift
"""
import argparse
import importlib.util
import os
import subprocess
import sys
REPO = "/root/troupe-standup"
SOL = os.path.join(REPO, "wizard-work", "sol")
MAN = os.path.join(SOL, "untracked-classify-2026-11-02.tsv")
HERE = os.path.dirname(os.path.abspath(__file__))
REPO_DEFAULT = os.path.dirname(os.path.dirname(HERE)) # .../troupe-standup
MANIFEST_REL = "wizard-work/sol/untracked-classify-2026-11-02.tsv"
SNAPSHOT_REL = "wizard-work/sol/untracked-classify-2026-11-02.snapshot.txt"
GENERATOR_REL = "wizard-work/sol/gen_untracked_classify_2026_11_02.py"
# The commit that added the manifest and the snapshot: the universe the census
# describes. Its own two files are tracked there, so `pinned-absence` is
# measured against the tree *at* that commit, not against HEAD.
PIN_FULL = "4a640e107d2c325baead03a9acaf4346d9ced9e3"
SOUND_EXT = (".json", ".csv", ".tsv", ".db", ".yaml", ".yml", ".toml", ".lock",
".jsonl", ".html", ".css", ".xml", ".pin", ".sx2gia", ".jpg",
".jpeg", ".png", ".pdf", ".mp3", ".mp4", ".gif")
class CannotGrade(Exception):
"""rc 2: the tree or the artifact could not be read at all."""
# --- rule table (same convention as the generator) --------------------------
def category(p):
"""The rule table, copied from gen_untracked_classify_2026_11_02.py.
Duplicated on purpose -- a verifier that imported the generator's function
would agree with the generator by construction -- and the duplication is
graded by the `rule-agreement` leg instead of being trusted."""
base = os.path.basename(p)
if p.startswith("wizard-work/null/"):
return "probe"
@@ -48,81 +93,280 @@ def category(p):
return "tool"
if base.endswith((".md", ".txt")):
return "report"
if base.endswith((".json", ".csv", ".tsv", ".db", ".yaml", ".yml", ".toml",
".lock", ".jsonl", ".html", ".css", ".xml", ".pin",
".sx2gia", ".jpg", ".jpeg", ".png", ".pdf", ".mp3",
".mp4", ".gif")):
if base.endswith(SOUND_EXT):
return "data"
return "other"
def live_universe():
"""The untracked universe re-derived from the live git tree (fresh)."""
r = subprocess.run(
["git", "-C", REPO, "ls-files", "--others", "--exclude-standard"],
capture_output=True, text=True, check=True,
)
return sorted(l for l in r.stdout.splitlines() if l.strip())
def _git(repo, *args, **kw):
try:
return subprocess.run(["git", "-C", repo] + list(args), capture_output=True,
text=True, timeout=kw.get("timeout", 120))
except (OSError, subprocess.SubprocessError) as exc:
raise CannotGrade("git could not be run in %s: %s" % (repo, exc))
def main():
errs = []
# 1. fresh re-derive of the live untracked universe
universe = live_universe()
exp = {p: category(p) for p in universe}
def read_snapshot(path):
try:
with open(path, "r", encoding="utf-8") as fh:
return [l.rstrip("\n") for l in fh if l.strip()]
except OSError as exc:
raise CannotGrade("snapshot unreadable at %s: %s" % (path, exc))
# 2. the committed manifest must carry exactly that universe with those categories
if not os.path.exists(MAN):
print("VERDICT: FAIL (manifest missing: %s)" % MAN)
return 1
man_rows = [l.rstrip("\n") for l in open(MAN) if l.strip()]
if man_rows and man_rows[0] == "path\tcategory":
man_rows = man_rows[1:]
man_paths = [r.split("\t")[0] for r in man_rows]
man_cat = {}
for r in man_rows:
parts = r.split("\t")
if len(parts) != 2:
errs.append("bad manifest row (tab count): %r" % r)
else:
man_cat[parts[0]] = parts[1]
if set(man_paths) != set(exp):
errs.append("universe mismatch: manifest=%d live=%d"
% (len(man_paths), len(exp)))
for p in sorted(set(man_paths) ^ set(exp)):
if p in man_paths:
errs.append(" manifest-only: %r" % p)
else:
errs.append(" live-only: %r" % p)
for p in sorted(set(man_paths) & set(exp)):
if man_cat.get(p) != exp[p]:
errs.append("category mismatch for %r: manifest=%r rule=%r"
% (p, man_cat.get(p), exp[p]))
def read_manifest(path):
"""-> [(path, category)]; the header, if present, is dropped."""
try:
with open(path, "r", encoding="utf-8") as fh:
raw = fh.read().splitlines()
except OSError as exc:
raise CannotGrade("manifest unreadable at %s: %s" % (path, exc))
if raw and raw[0].split("\t")[:2] == ["path", "category"]:
raw = raw[1:]
return [(r.split("\t")[0], r.split("\t")[1] if "\t" in r else None)
for r in raw if r.strip()]
# 3. every manifest path must still exist on disk and be untracked (not in
# the git index at all).
for p in man_paths:
if not os.path.exists(os.path.join(REPO, p)):
errs.append("manifest path missing on disk: %r" % p)
def pinned_tree(repo, pin):
r = _git(repo, "ls-tree", "-r", "--name-only", pin)
if r.returncode != 0:
raise CannotGrade("pin %s does not resolve in %s: %s"
% (pin, repo, (r.stderr or "").strip()))
return set(r.stdout.splitlines())
def generator_rule(repo):
path = os.path.join(repo, GENERATOR_REL)
if not os.path.isfile(path):
raise CannotGrade("the generator is absent at %s" % path)
try:
spec = importlib.util.spec_from_file_location("gen_untracked_q157", path)
mod = importlib.util.module_from_spec(spec)
spec.loader.exec_module(mod)
return mod.category
except Exception as exc: # noqa: BLE001 -- any import fault is rc 2
raise CannotGrade("the generator could not be imported: %s" % exc)
def grade(man, snap, tree, rule, other_rule):
"""-> faults, the whole verdict. Each fault is (code, text)."""
faults = []
man_paths = [p for p, _c in man]
malformed = [p for p, c in man if c is None]
# pinned-universe: same members, same order (the generator sorts, so order
# is part of the artifact and a shuffled manifest is a different artifact).
if man_paths != snap:
only_man = sorted(set(man_paths) - set(snap))
only_snap = sorted(set(snap) - set(man_paths))
faults.append(("universe",
"manifest rows %d != snapshot lines %d; %d manifest-only, "
"%d snapshot-only" % (len(man_paths), len(snap),
len(only_man), len(only_snap))))
for p in only_man[:5]:
faults.append(("universe", " manifest-only: %r" % p))
for p in only_snap[:5]:
faults.append(("universe", " snapshot-only: %r" % p))
if len(man_paths) == len(snap) and not only_man and not only_snap:
faults.append(("universe", " same members, different order"))
for p in malformed[:10]:
faults.append(("malformed-row", "manifest row has no category column: %r" % p))
# category: the rule table applied to the pinned universe.
for p, c in man:
if c is None:
continue
st = subprocess.run(
["git", "-C", REPO, "ls-files", "--error-unmatch", "--", p],
capture_output=True, text=True,
)
if st.returncode == 0:
errs.append("manifest path is tracked (in the index), not untracked: %r" % p)
want = rule(p)
if c != want:
faults.append(("category", " %r manifest=%r rule=%r" % (p, c, want)))
if errs:
print("VERDICT: FAIL (%d problem(s))" % len(errs))
for e in errs[:40]:
print(" -", e)
# rule-agreement: the verifier's copy against the generator's.
for p, _c in man:
if rule(p) != other_rule(p):
faults.append(("rule-agreement",
" %r verifier=%r generator=%r"
% (p, rule(p), other_rule(p))))
# pinned-absence: every row was untracked at the pin.
for p, _c in man:
if p in tree:
faults.append(("pinned-absence",
" %r is present in the pinned tree, so it was not an "
"untracked file when the census was taken" % p))
return faults, man_paths
def live_drift(repo, man_paths):
"""-> (added, gone, tracked_since); measured, never fatal."""
r = _git(repo, "ls-files", "--others", "--exclude-standard")
if r.returncode != 0:
return None, None, None
live = set(l for l in r.stdout.splitlines() if l.strip())
t = _git(repo, "ls-files")
tracked = set(t.stdout.splitlines()) if t.returncode == 0 else set()
man = set(man_paths)
return sorted(live - man), sorted(man - live), sorted(man & tracked)
def report(repo, pin, manifest, snapshot, quiet_drift=False, stream=sys.stdout):
man = read_manifest(manifest)
snap = read_snapshot(snapshot)
tree = pinned_tree(repo, pin)
other = generator_rule(repo)
faults, man_paths = grade(man, snap, tree, category, other)
added, gone, now_tracked = live_drift(repo, man_paths)
if not quiet_drift and added is not None:
print("ADVISORY: live untracked set differs from the pinned universe -- "
"%d added, %d gone, %d now tracked (drift is expected; the verdict "
"grades the pinned artifact)" % (len(added), len(gone), len(now_tracked)))
for p in added[:6]:
print("ADVISORY: + %s" % p)
if len(added) > 6:
print("ADVISORY: ... %d more added" % (len(added) - 6))
for p in gone[:6]:
print("ADVISORY: - %s" % p)
for p in now_tracked[:6]:
print("ADVISORY: = %s (tracked since the pin)" % p)
if faults:
by_code = {}
for code, _text in faults:
by_code[code] = by_code.get(code, 0) + 1
print("VERDICT: FAIL (%d problem(s): %s)"
% (len(faults), ", ".join("%s=%d" % kv for kv in sorted(by_code.items()))))
for _code, text in faults[:40]:
print(" -%s" % ("" if text.startswith(" ") else " ") + text)
return 1
print("CHECK OK: %d untracked files classified from the LIVE repo; "
"manifest re-derives from git; all paths present on disk" % len(universe))
print("CHECK OK: %d pinned paths; manifest==snapshot in order; categories "
"re-derive by rule; rule agrees with the generator; no pinned path was "
"tracked at %s" % (len(man), pin[:7]))
return 0
# --------------------------------------------------------------------------
# selftest: the verdict must be able to go red and to refuse.
# --------------------------------------------------------------------------
def _write(path, lines):
with open(path, "w", encoding="utf-8") as fh:
fh.write("\n".join(lines) + "\n")
def _codes(man, snap, tree, rule, other):
faults, _paths = grade(man, snap, tree, rule, other)
return {c for c, _t in faults}
def selftest(repo, pin, manifest, snapshot):
man0 = read_manifest(manifest)
snap0 = read_snapshot(snapshot)
tree = pinned_tree(repo, pin)
other = generator_rule(repo)
tmp = os.path.join(os.environ.get("TMPDIR", "/tmp"), "q157-selftest-%d" % os.getpid())
cells = []
def cell(name, got, want, expect_ok=True):
ok = (set(want) <= got) if expect_ok else (not (set(want) & got))
cells.append((name, ok, sorted(got)))
print("%-4s %-22s faults=%s" % ("PASS" if ok else "FAIL", name,
sorted(got) or "-"))
def cell_empty(name, got):
"""The green control: an empty fault set is the only pass."""
ok = (got == set())
cells.append((name, ok, sorted(got)))
print("%-4s %-22s faults=%s" % ("PASS" if ok else "FAIL", name,
sorted(got) or "-"))
try:
os.makedirs(tmp, exist_ok=True)
cell_empty("clean", _codes(man0, snap0, tree, category, other))
dropped = list(man0)
dropped.pop(3)
cell("drop-row", _codes(dropped, snap0, tree, category, other), {"universe"})
swapped = list(man0)
swapped[1], swapped[2] = swapped[2], swapped[1]
sw_faults, _p = grade(swapped, snap0, tree, category, other)
sw_text = " | ".join(t for _c, t in sw_faults)
cells.append(("same-members-reordered", "different order" in sw_text, sorted(
{c for c, _t in sw_faults})))
print("%-4s %-22s faults=%s" % ("PASS" if "different order" in sw_text else "FAIL",
"same-members-reordered",
sorted({c for c, _t in sw_faults}) or "-"))
badcat = [(p, ("data" if c != "data" else "other")) for p, c in man0]
cell("bad-category", _codes(badcat, snap0, tree, category, other), {"category"})
norow = list(man0)
norow.append(("wizard-work/sol/README.md", None))
cell("malformed-row", _codes(norow, snap0, tree, category, other),
{"malformed-row"})
tracked = list(man0) + [("README.md", category("README.md"))]
cell("tracked-at-pin", _codes(tracked, snap0, tree, category, other),
{"pinned-absence"})
def drifted(p):
return other(p) if p.endswith(".py") else "other"
cell("rule-divergence", _codes(man0, snap0, tree, drifted, other),
{"rule-agreement"})
try:
read_manifest(os.path.join(tmp, "absent.tsv"))
cell("missing-artifact", {"no-refusal"}, set(), expect_ok=False)
except CannotGrade:
cell("missing-artifact", {"rc2"}, {"rc2"})
# a malformed copy is written and read back, so the cell grades the file
# on disk rather than the in-memory list
bad = os.path.join(tmp, "bad.tsv")
_write(bad, ["path\tcategory", "README.md"]) # no tab on row 2
cell("bad-file-on-disk", _codes(read_manifest(bad), snap0, tree, category, other),
{"malformed-row"})
finally:
for name in os.listdir(tmp) if os.path.isdir(tmp) else []:
try:
os.unlink(os.path.join(tmp, name))
except OSError:
pass
try:
os.rmdir(tmp)
except OSError:
pass
failed = [c for c in cells if not c[1]]
print("selftest: %d cell(s), %d failed" % (len(cells), len(failed)))
return 0 if not failed else 1
def main(argv=None):
ap = argparse.ArgumentParser(description="grade the 2026-11-02 untracked-file "
"triage artifact against its pinned universe")
ap.add_argument("--repo", default=REPO_DEFAULT)
ap.add_argument("--pin", default=PIN_FULL)
ap.add_argument("--manifest", default=None)
ap.add_argument("--snapshot", default=None)
ap.add_argument("--quiet-drift", action="store_true")
ap.add_argument("--selftest", action="store_true")
args = ap.parse_args(argv)
repo = os.path.abspath(args.repo)
manifest = args.manifest or os.path.join(repo, MANIFEST_REL)
snapshot = args.snapshot or os.path.join(repo, SNAPSHOT_REL)
try:
if args.selftest:
return selftest(repo, args.pin, manifest, snapshot)
return report(repo, args.pin, manifest, snapshot, args.quiet_drift)
except CannotGrade as exc:
print("CANNOT GRADE: %s" % exc)
return 2
if __name__ == "__main__":
sys.exit(main())
+8 -2
View File
@@ -550,8 +550,14 @@ PIN_OPENED = [51, 52, 53, 65, 100, 101, 102, 103, 104, 105, 106, 107, 109,
# ids 145 -> 146; record_only stays 55 and open / opened stay 0 / 26 (same-tick
# closure, no probe; CHECK-q156 is its guard). Measured on a byte-identical
# candidate queue before the append and confirmed by --check after it.
PIN_COUNTS = {"headings": 104, "heading_ids": 91, "records": 118,
"record_ids": 84, "ids": 146, "open": 0, "opened": 26,
# Q157 (2026-11-02): one heading (## Q157 closure) and one record (**Q157 --
# OPENED and REPAIRED ...) for a new id, so headings 104 -> 105, heading_ids
# 91 -> 92, records 118 -> 119, record_ids 84 -> 85, ids 146 -> 147;
# record_only stays 55 and open / opened stay 0 / 26 (same-tick closure, no
# probe; CHECK-q157 is its guard). Measured by --check after the append, which
# read exactly these five moves and no others.
PIN_COUNTS = {"headings": 105, "heading_ids": 92, "records": 119,
"record_ids": 85, "ids": 147, "open": 0, "opened": 26,
"record_only": 55}
PIN_STATE = {
@@ -156,3 +156,10 @@ CHECK-q153 0 q153: 2 leg(s), all passed
wizard-work/ledger/2026-11-02-workqueue-census/CHECK 0 ALL CHECKS PASSED (88 rows, 85 distinct q-numbers, pin a7f7165@0ec1c64)
# rows signed (q148 via retake.py, 2026-11-02): 1 entry point(s) measured, --timeout 120 --jobs 4, at HEAD 0ec1c64
CHECK-q155 0 q155: 3 leg(s), all passed
# rows added by hand (Q157, 2026-11-02): CHECK-2026-11-02-untracked-classify is a
# NEW entry point that read rc 1 at 602e982 (VERDICT: FAIL (7 problem(s))) and reads
# rc 0 after the repair; CHECK-q157 is the new guard for that repair. Both codes
# measured with this directory own run_entry via `check_sweep.py --only <path>
# --check` at the Q157 worktree; every other row above is unchanged.
CHECK-2026-11-02-untracked-classify 0 CHECK OK: 306 pinned paths; manifest==snapshot in order
CHECK-q157 0 q157: 6 leg(s), all passed
Can't render this file because it contains an unexpected character in line 93 and column 87.