volt: manifest_audit re-reads every artifact files.sha256 at its own base (19 presented, 17 verify, 2 known); check-in 2026-10-23

This commit is contained in:
volt committed 2026-10-23 21:18:14 +00:00
1 parent 46fe705fa0
commit 9a31e126a5
3 files changed
+42 -11

No files matched your search

+18
View File
@@ -10668,3 +10668,21 @@ Artifact `/root/.hermes/wizard-outputs/volt/2026-10-23-tracked-residue/` — `RE
Nothing else moved: `ab0d96a` still carries zero tracked `.pyc` and the first `.gitignore`, the tracked paths are 2,614 → 2,596 across it, and `sh check.sh` at this state reads **CHECK: PASS**, nine checks, rc 0. No item opened or closed.
— Volt
**Manifest audit 2026-10-23 (volt, Workhorse) — nineteen checksum manifests sit in this lane's artifact root and no instrument re-read one against the bytes beside it: the question "is this manifest still true for this directory, today?" now has a 17-cell tool, and the answer at this tick is 18 verify, 2 broken (both the pair the 2026-10-21 claims record already ledgered), 250 entries still matching.** No item opened or closed; the open set is unchanged (`Q37`'s pipe span, the career-lane `Q53` decision held for Alexander, `Q64`'s design question Alexander's). Appended at the foot; `docs/queue-index.md` re-rendered in the same commit.
1. **The gap, as an absence rather than a suspicion.** `tools/` grades whether a cited path resolves (`path_claim_check.py`), whether a tool's own count moved (`selftest_sweep.py`), and whether the served bytes match a revision (`served_drift_check.py`); nothing grades whether an artifact's `files.sha256` still describes the artifact. `artifact_claim_check.py` (2026-10-21) grades which **base** a manifest pins and was never shipped into `tools/`; `sha256sum -c` verifies one manifest when a reader remembers to run it from the right directory. So the class was measured by hand or not at all, and 86 directories under `/root/.hermes/wizard-outputs/volt` stood behind that.
2. **What landed, as an instrument with a stated base.** `manifest_audit.py` walks the artifact root, and for every directory presenting a `files.sha256` re-hashes each entry at **the manifest's own directory**, the only base a manifest has: `VERIFIED`, `STALE` (bytes changed), `MISSING_ENTRY`, `FOREIGN_BASE` (an entry resolving outside the directory — absolute or climbing `../` — which pins another tree and cannot verify this artifact whatever its hashes say), `EMPTY`. A directory with no manifest is `NO_MANIFEST`, printed and counted, never faulted: an artifact that never claimed checksums has not broken a claim. Exit codes follow the house contract — **0** graded with no new fault, **1** `--fail`/`--strict` and an unledgered fault, **2** could not grade (missing root, unreadable ledger; an audit that graded nothing did not pass).
3. **The measurement, at the state before this artifact's own manifest existed.** `19 presented, 67 without one`, `VERIFIED 17, FOREIGN_BASE 1, STALE 0, MISSING_ENTRY 1, EMPTY 0`, **255 entries parsed, 250 hashed and matching**, two faults: `2026-10-19-lint-fclass` (2 entries, both repo-relative `tools/` paths that resolve to no file at the manifest's own base) and `2026-10-19-reply-leg` (3 absolute `/root/troupe-standup/tools/` paths, 2 of whose hashes had drifted at the 2026-10-21 reading). Both are the pair the claims record already found and left unrepaired for the reasons it states; **no new defect appeared in the two days between**, and 17 manifests covering 250 entries still verify. At the artifact's own final state the same command reads `20 presented, 66 without one`, `VERIFIED 18`, **263 entries, 258 matching**, rc 0.
4. **The one class disagreement with the 2026-10-21 reading is stated, not smoothed.** That record called `lint-fclass`'s 2 entries `FOREIGN_BASE` because it resolves a token at the repo root; this tool calls them `MISSING_ENTRY` because it resolves at the manifest's own directory. Both agree the manifest names no file it can verify, and the ledger row's note carries the difference, so a reader meets the disagreement instead of a silently chosen side.
5. **The ledger proves itself in both directions on the same tree, minutes apart.** `--baseline baseline.tsv --fail` → `2 known, 0 new, 0 cleared`, **rc 0**; `--strict --fail` → `0 known, 2 new`, **rc 1**. Suppression is of the exit code and never of the finding: every known row prints with its class on every run, and a row that stops reproducing prints `CLEARED`. `--selftest` reads **17 cells, 17 passed, 0 failed**, planting every class in a throwaway root and exercising both rc-2 preconditions, the four suppression directions and `--json`. Two cells failed on the first run: `c7`'s expected hash count was the fixture's arithmetic being wrong, and `c16` was a real gap in the shipped exit contract (`--strict` did not imply grading) — the tool was fixed for `c16`, the cell was not relaxed.
6. **What it does not claim.** Directory-level, not intent: `STALE` says bytes changed after the manifest was written, never why, and `--json` carries the per-entry lists. A `FOREIGN_BASE` entry is never hashed, so the verdict is about the base. `realpath` settles the inside/outside test, so an in-artifact symlink pointing out grades `FOREIGN_BASE` — deliberate. The census counts directories, so a manifest kept in a subdirectory reads as absent; none does today. The two faults are **not repaired here**, for the reason the claims record gives: regenerating a manifest over a 2026-10-19 artifact proves 2026-10-23. And the tool ships in the artifact, not in `tools/`: a gate leg means editing `selftest_sweep.py`'s probe tables and re-pinning `selftest_baseline.tsv`, and this worktree still carries another lane's uncommitted edits to `census_row_delta.py` and that pin file, which this tick did not touch.
Artifact `/root/.hermes/wizard-outputs/volt/2026-10-23-manifests/` — `REPORT.md`, `check.sh`, `manifest_audit.py`, `baseline.tsv`, four transcripts (a pre-manifest reading, captured before the manifest and never rewritten after it), and a `files.sha256` over its own eight files (`sh check.sh` → `CHECK: PASS`, six checks, rc 0).
— Volt
+13
View File
@@ -0,0 +1,13 @@
# 2026-10-23 — volt
**Did:**
- **Gate re-read at this worktree, before any edit this tick.** `python3 tools/verify.py --repo .` → `7 legs, 7 pass, 0 fault, 0 ungradable, 0 skipped`, `gate: OK`, **rc 0** (351 s wall). Per-leg: `checkin 71 ms` (85 files, 0 new faults, 35 known-faulting in the baseline), `reply-headings 920 ms` (307 files, 0 new), `index-current 923 ms` (10,670 lines / 1,455,982 B), `append-audit 2,075 ms`, `doc-commands 14,974 ms` (67 commands over 19 oracles, OK 67), `selftest-sweep 281,607 ms` (`pin: 21 pinned, 21 agree, 0 drift`), `write-axis 22,002 ms`.
- **Queue census, same tick.** `python3 tools/queue_claim_check.py` → `16 opening records; 13 closed; 3 open`, `open set: Q37:5278, Q53:7303, Q64:10320`, 73 anchored closure statements (ACS), `fenced skipped: 7 line(s) in 1 block(s)`. All three open items are already Alexander's or a named lane's; nothing unowned, so nothing was claimed by inventing one.
- **Shipped the missing instrument on the lane's checksum manifests.** A new tool, `/root/.hermes/wizard-outputs/volt/2026-10-23-manifests/manifest_audit.py`, re-reads every artifact directory's `files.sha256` at **the manifest's own base**: `19 presented, 67 without one (census, not a fault)`, `VERIFIED 17, FOREIGN_BASE 1, STALE 0, MISSING_ENTRY 1, EMPTY 0`, **255 entries parsed, 250 hashed and matching**. The 2 faults are the pair the 2026-10-21 claims record already ledgered (`2026-10-19-lint-fclass` 2 entries, `2026-10-19-reply-leg` 3 absolute `tools/` paths); **no new break in two days**. Both directions measured on one tree: `--baseline … --fail` → `2 known, 0 new`, **rc 0**; `--strict --fail` → `0 known, 2 new`, **rc 1**. `--selftest` **17 cells, 17 passed, 0 failed**. `sh check.sh` → `CHECK: PASS`, six checks, rc 0. Record appended to the queue in this same tick.
- **A candidate tool was measured and rejected instead of built.** Before choosing the above, the markdown-link class was probed on the tracked set: `545` link targets in 671 tracked `.md` files, **433 absolute URLs, 6 relative**, of which 5 do not resolve — 4 are untracked figure paths inside `wizard-work/sphinx/transformer-archive/` (images deliberately not committed) and 1 is the prose token `*args` matched by `](...)`. Three real targets would not carry a tool, so the class was dropped on the measurement.
**Blocked:** nothing new this tick. The two manifest faults stay unrepaired on purpose — a manifest regenerated over a 2026-10-19 artifact proves 2026-10-23, and the pair is ledgered and printed on every run rather than silenced. `manifest_audit.py` stays in the artifact rather than `tools/`: a gate leg means editing `selftest_sweep.py`'s probe tables and re-pinning `selftest_baseline.tsv`, and this worktree carries another lane's uncommitted edits to `census_row_delta.py` and that pin file. Career-lane `Q53` and `Q64` remain Alexander's, not re-raised.
**Next:** graduate `manifest_audit.py` into `tools/` as a gate leg once the pin file is clean and the probe axes are written for it (read-refusal, non-UTF-8, malformed manifest); re-read the lane manifest census after the next artifacts land, since this tick's figure is a snapshot of 86 directories; re-run today's rejected link probe only if the archive ever starts committing relative links in volume.
**Ask:** nothing this tick.
+11 -11
View File
@@ -56,7 +56,7 @@
| 46 | Q44 | 6162-6705 | 88496 | opening | The pin class: redirect every constant composed from the live data root, not only `SNAPSHOT_PATH` *(Helm lane; opened 2026-10-12 by the pipe, per Q43's own closing sentence — "extend the redirect … | DONE 2026-10-12 — `recoveries/helm-root-redirect.md` (Merlin, Helm lane); the closure block is at the foot |
| 47 | Q48 | 6706-6825 | 15123 | opening | The runtime-resolution redirect: close the class Q45's literals cannot see | DONE 2026-10-13 — `recoveries/helm-runtime-redirect.md` (Merlin, Helm lane), scratch tree |
| 48 | Q49 | 6826-7593 | 92050 | opening | The runtime-resolved root's live write path: name it, reproduce it, then close it | open and unclaimed. Opened by the pipe 2026-10-13 |
| 49 | Q45 | 7594-10670 | 563721 | opening | §9 follow-on — the home-directory channel *(Helm lane; Merlin)* | OPEN — awaiting Alexander's zoom/whole-shop answer; build is the pipe's. |
| 49 | Q45 | 7594-10688 | 569261 | opening | §9 follow-on — the home-directory channel *(Helm lane; Merlin)* | OPEN — awaiting Alexander's zoom/whole-shop answer; build is the pipe's. |
## Ids with no `## ` heading
@@ -71,9 +71,9 @@ Opened as records inside another section. `line` is the record's own opening lin
| Q50 | 6990 | 6990 | 46 | Q49 | BULLET+BOLD | BOLD-LEAD |
| Q51 | 7106 | 7106 | 37 | Q49 | BULLET+BOLD | BOLD-LEAD |
| Q52 | 7167 | 7167 | 90 | Q49 | BULLET+BOLD | BOLD-LEAD |
| Q53 | 7292 | 7246 | 158 | Q49 | BULLET+BOLD | BOLD-LEAD |
| Q53 | 7292 | 7246 | 159 | Q49 | BULLET+BOLD | BOLD-LEAD |
| Q63 | 9918 | 9909 | 17 | Q45 | BULLET+BOLD | BOLD-LEAD |
| Q64 | 10308 | 10308 | 21 | Q45 | BULLET+BOLD | BOLD-LEAD |
| Q64 | 10308 | 10308 | 22 | Q45 | BULLET+BOLD | BOLD-LEAD |
**Not in this document.** Ids the prose corpus names that the queue has never mentioned (`checkins/`, `replies/`, `recoveries/`, `audits/`, `docs/`, the top-level documents; `tools/` excluded). That set moves with the prose, not with the queue, so embedding it here would make `--check` go RED for a reason that has nothing to do with the queue being current. It is reported on demand: `python3 tools/queue_index.py --outside`.
@@ -218,7 +218,7 @@ The block below is the parse this document renders, byte for byte. `--check` com
"form": "BOLD-LEAD",
"id": "Q53",
"line": 7292,
"refs": 158,
"refs": 159,
"section": "Q49",
"shape": "BULLET+BOLD"
},
@@ -236,7 +236,7 @@ The block below is the parse this document renders, byte for byte. `--check` com
"form": "BOLD-LEAD",
"id": "Q64",
"line": 10308,
"refs": 21,
"refs": 22,
"section": "Q45",
"shape": "BULLET+BOLD"
}
@@ -246,9 +246,9 @@ The block below is the parse this document renders, byte for byte. `--check` com
"end_line": 8,
"line": 1
},
"queue_bytes": 1455982,
"queue_lines": 10670,
"queue_sha256": "2bf1d8c31f277da5478ba3bf7dac46965a9b31bd776bd6d035a0ee871ecd2e6d",
"queue_bytes": 1461522,
"queue_lines": 10688,
"queue_sha256": "dc69c890f67edfaed102c1f2d80a668f309695658cb76a8b6c9040b9c501a436",
"sections": [
{
"bytes": 3139,
@@ -827,11 +827,11 @@ The block below is the parse this document renders, byte for byte. `--check` com
"title": "The runtime-resolved root's live write path: name it, reproduce it, then close it"
},
{
"bytes": 563721,
"end_line": 10670,
"bytes": 569261,
"end_line": 10688,
"id": "Q45",
"line": 7594,
"lines": 3077,
"lines": 3095,
"role": "opening",
"role_detail": "",
"status": "OPEN \u2014 awaiting Alexander's zoom/whole-shop answer; build is the pipe's.",