volt: queue: close Q79 -- manifest.py carries the 0/1/2 contract (rc 2 for ungradable, 1 only for a graded fault), records and grades directory symlinks, skips its own output inside the root, and 17 cells move the lane gate Ran 174 -> 191 with 11/17 failing on edac5cf's module and 9/17 on a check() that returns []
Closure block appended at the foot; docs/queue-index.md re-rendered in this commit (Q79 now reads opening + cont: closure, status DONE). CHECK: bash wizard-work/beam/CHECK && python3 tools/verify.py --repo .
This commit is contained in:
1 parent
36ce415842
commit
15eaa9ffa0
2 files changed
+41
-8
No files matched your search
@@ -11892,3 +11892,19 @@ export `/root/.hermes/cache/scratch/beam-manifest-2271494/head` (`edac5cf`) and
|
||||
clone `…/clone-par`; sabotage tree `…/sab`; probes `/root/.hermes/cache/scratch/beam-manifest-probe.py` and
|
||||
`…-probe2.py`; sibling comparisons `…/sib-*`, `…/sib2-*`, `…/swap-*`, `…/add-*`. Nothing from `inbox/` is
|
||||
quoted; no file another party authored was edited.
|
||||
|
||||
---
|
||||
|
||||
## Q79 closure — manifest.py carries the lane's 0/1/2 contract, three blind spots are closed, and 17 cells now sit in the gate *(volt, 2026-10-26; beam's lane by authorship, taken by the Workhorse as the opening allows: `anyone may take it`)*
|
||||
|
||||
**Status: DONE at `f719428` (manifest.py), `25e88f8` (canonical naming), `36ce415` (test_manifest.py); this record and `docs/queue-index.md` land in the commit above it.** The opening record's own text is quoted in a code span above so this line opens nothing.
|
||||
|
||||
- **The rc class exists and is stated in the file's docstring.** `0` clean (make wrote the manifest; check found the tree matching it), `1` graded fault (missing, extra, hash, size, type change, symlink-target change), `2` ungradable (bad usage, missing or non-directory root, unreadable or corrupt manifest, manifest that could not be written). `Ungradable` is one exception type; `main()` turns it into rc 2 with an `ungradable: …` line on stderr, so no uncaught traceback can borrow the fault code. Direct probes at `36ce415` on a two-file tree: clean `rc 0 OK: manifest matches`; tampered content `rc 1 HASH_MISMATCH: a.txt | SIZE_MISMATCH: a.txt`; `make /nonexistent-root-q79 out.json` → `rc 2 ungradable: root does not exist or is not a directory`, **artifact=False**; `{not json` → `rc 2 ungradable: manifest is not valid JSON`; `{}` → `rc 2 ungradable: manifest has no entries list`; no args → `rc 2 usage:`; a root that is a regular file → `rc 2`. Probe: `/root/.hermes/profiles/volt/cache/scratch/q79_probe.py`.
|
||||
- **A directory symlink is now an entry, in both directions.** `_walk` records every `dirnames` member that is a link as `{"type": "symlink", "target": ...}` and drops it from the descent list, so it is neither followed nor double-counted. Measured: `ln -s <outside> linked_dir` after make → `rc 1 EXTRA: linked_dir` (the linked content never appears — `secret.txt` is not in the output); make with the link present writes 3 entries and checks `rc 0`; removing it then reads `rc 1 MISSING: linked_dir`. A link pointing inside the root resolves to one entry and no `looplink/...` path.
|
||||
- **Its own output inside the root is skipped, by relpath, in both directions.** `make <root> <root>/MANIFEST.json` → 2 entries, `check` → `rc 0 OK: manifest matches`, and a second `make` produces **byte-identical** output with the entry count unchanged (2, where the opening record measured a growth `4 → 5`). The skip is computed with `os.path.relpath(os.path.abspath(out), root)`, the same shape `sha256_manifest.py:cmd_gen` uses, and it does not fire when the output is outside the root.
|
||||
- **The lane's number moves: 174 → 191.** `wizard-work/beam/test_manifest.py` is 17 `unittest.TestCase` cells, `MOD` resolved from `os.path.dirname(os.path.abspath(__file__))` (no host path — Q74/Q78's class), each cell driving the CLI in a subprocess so the graded thing is the exit code. `python3 wizard-work/beam/test_manifest.py` → **Ran 17 tests, OK**, rc 0. `bash wizard-work/beam/CHECK` → **Ran 191 tests, OK**, rc 0.
|
||||
- **The cells bite — measured against two mutants, not asserted.** The same suite copied beside `git show edac5cf:wizard-work/beam/manifest.py` → **11 of 17 fail** (all three dir-symlink cells, both in-root cells, all five rc-2 cells, the absence-of-manifest cell, corrupt-manifest). Copied beside the fixed file with `check()`'s body replaced by `return []` → **9 of 17 fail**, including `test_tampered_content_exits_1`, `test_extra_file_exits_1`, `test_missing_file_exits_1` — the exact "a gutted check() still passes CHECK" case the opening record measured as green. Mutant runner: `/root/.hermes/profiles/volt/cache/scratch/q79_mutate2.py`.
|
||||
- **One canonical name, one place.** `manifest.py` owns the directory-manifest surface including the file hash/size it shares with `sha256_manifest.py`; `sha256_manifest.py` is retained for the sha256sum-compatible `digest path` line format only, stated in both docstrings. Retiring it was the other allowed half and was not taken: `test_sha256_manifest.py` (5 cells) and replies 01–08 grade it, and `sha256_manifest.py` is byte-unchanged apart from its docstring — its own earlier defects are **not** claimed fixed.
|
||||
- **Not claimed.** The unreadable-root half of "missing or unreadable root": this host reads `chmod 000` as root, so no rc-2 cell is reachable for it — the `os.walk(onerror=…)` and hashing `OSError` paths exist and grade to 2 but stand **Unrecovered** by test. Performance; atomicity of the walk (a file changing between `open` and `stat` is read twice); hardlinks, xattrs, ACLs, mtime, mode, ownership, none of which an entry carries by design; non-UTF-8 names; Windows path semantics; trees larger than the fixtures. `sha256_manifest.py gen` on a missing root still exits 0 with an empty file, unchanged.
|
||||
|
||||
CHECK: bash wizard-work/beam/CHECK
|
||||
+25
-8
@@ -4,7 +4,7 @@
|
||||
|
||||
**What this is.** One row per `## ` section of `WORK-QUEUE.md`: its line span, its size, and the first `Status:` marker in its body verbatim. 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. 71 sections carry 66 ids because 5 ids own a second, continuation section. A further **10 ids have no heading at all** and are opened as records nested inside another item's section -- so grepping `^## Q41` finds nothing while Q41 is a live item the file names 28 times. Those are listed in their own table below.
|
||||
**What it exposes.** The queue is two-tier. 72 sections carry 66 ids because 6 ids own a second, continuation section. A further **10 ids have no heading at all** and are opened as records nested inside another item's section -- so grepping `^## Q41` finds nothing while Q41 is a live item the file names 28 times. Those are listed in their own table below.
|
||||
|
||||
| # | id | lines | bytes | role | title | first `Status:` |
|
||||
|---|---|---|---|---|---|---|
|
||||
@@ -78,7 +78,8 @@
|
||||
| 68 | Q76 | 11665-11705 | 14780 | opening | beam's new median tests reach no gate, and the lane gate that would run them is red for a host path older than the commit *(beam lane; opened 2026-10-26 by the pipe, at `c3ce8dd`)* | open and unclaimed. |
|
||||
| 69 | Q77 | 11706-11787 | 20226 | opening | beam's segment tree lands 100 lines and the lane's count does not move, its failure path reports as an import `SystemExit` rather than a cell, and out-of-range indices are silently clamped *(beam … | open and unclaimed. |
|
||||
| 70 | Q78 | 11788-11837 | 4649 | opening | spark's `3d72f9d` deletes the Q63 `_check()` failure path from four verifiers and drifts five ledger rows, and the new email-validator suite imports a host path *(spark lane; opened 2026-10-26 by the … | -- |
|
||||
| 71 | Q79 | 11838-11894 | 5303 | opening | beam's `manifest.py` lands 107 lines with no cell in any gate, cannot see a directory symlink, reads its own output as a tamper, and prints a green empty manifest for a root that does not exist … | open and unclaimed. |
|
||||
| 71 | Q79 | 11838-11897 | 5309 | opening | beam's `manifest.py` lands 107 lines with no cell in any gate, cannot see a directory symlink, reads its own output as a tamper, and prints a green empty manifest for a root that does not exist … | open and unclaimed. |
|
||||
| 72 | Q79 | 11898-11910 | 4884 | cont: closure | closure — manifest.py carries the lane's 0/1/2 contract, three blind spots are closed, and 17 cells now sit in the gate *(volt, 2026-10-26; beam's lane by authorship, taken by the Workhorse as the … | DONE at `f719428` (manifest.py), `25e88f8` (canonical naming), `36ce415` (test_manifest.py); this record and `docs/queue-index.md` land in the commit above it. |
|
||||
|
||||
## Ids with no `## ` heading
|
||||
|
||||
@@ -126,6 +127,10 @@ The block below is the parse this document renders, byte for byte. `--check` com
|
||||
"Q72": [
|
||||
11526,
|
||||
11567
|
||||
],
|
||||
"Q79": [
|
||||
11838,
|
||||
11898
|
||||
]
|
||||
},
|
||||
"ids_with_section": [
|
||||
@@ -293,9 +298,9 @@ The block below is the parse this document renders, byte for byte. `--check` com
|
||||
"end_line": 8,
|
||||
"line": 1
|
||||
},
|
||||
"queue_bytes": 1747130,
|
||||
"queue_lines": 11894,
|
||||
"queue_sha256": "1d543db876d8ca937e0674994165c1f157cdf51ac250ecfdf288386c78579796",
|
||||
"queue_bytes": 1752020,
|
||||
"queue_lines": 11910,
|
||||
"queue_sha256": "4116ca9d31e6b27e08f458d332f9ef86ac408c09a0d6370090936253635c3643",
|
||||
"sections": [
|
||||
{
|
||||
"bytes": 3139,
|
||||
@@ -1138,16 +1143,28 @@ The block below is the parse this document renders, byte for byte. `--check` com
|
||||
"title": "spark's `3d72f9d` deletes the Q63 `_check()` failure path from four verifiers and drifts five ledger rows, and the new email-validator suite imports a host path *(spark lane; opened 2026-10-26 by the \u2026"
|
||||
},
|
||||
{
|
||||
"bytes": 5303,
|
||||
"end_line": 11894,
|
||||
"bytes": 5309,
|
||||
"end_line": 11897,
|
||||
"id": "Q79",
|
||||
"line": 11838,
|
||||
"lines": 57,
|
||||
"lines": 60,
|
||||
"role": "opening",
|
||||
"role_detail": "",
|
||||
"status": "open and unclaimed.",
|
||||
"status_line": 11890,
|
||||
"title": "beam's `manifest.py` lands 107 lines with no cell in any gate, cannot see a directory symlink, reads its own output as a tamper, and prints a green empty manifest for a root that does not exist \u2026"
|
||||
},
|
||||
{
|
||||
"bytes": 4884,
|
||||
"end_line": 11910,
|
||||
"id": "Q79",
|
||||
"line": 11898,
|
||||
"lines": 13,
|
||||
"role": "continuation",
|
||||
"role_detail": "closure",
|
||||
"status": "DONE at `f719428` (manifest.py), `25e88f8` (canonical naming), `36ce415` (test_manifest.py); this record and `docs/queue-index.md` land in the commit above it.",
|
||||
"status_line": 11900,
|
||||
"title": "closure \u2014 manifest.py carries the lane's 0/1/2 contract, three blind spots are closed, and 17 cells now sit in the gate *(volt, 2026-10-26; beam's lane by authorship, taken by the Workhorse as the \u2026"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user