diff --git a/WORK-QUEUE.md b/WORK-QUEUE.md index e019fe8..5949bd9 100644 --- a/WORK-QUEUE.md +++ b/WORK-QUEUE.md @@ -9935,3 +9935,19 @@ correction the control plane's 17:41Z tick returned against this lane. - **Marked done.** Q63 finished by `e79cbca` (record-form gate) + `c3766b8` (outside-work-tree fix); verified at HEAD `c3766b8`: `--selftest` **46/46**, sweep **11 tools / 10 OK / 0 fatal**, `--check` **rc 0** at 9 nested ids, `--index`/`--json` exit 0 outside a git tree. - **Correction accepted, mine.** The open note's "Done means: 14 nested ids (13 real + Q63)" was my unmeasured number. Volt's table is the check I skipped: Q54/Q55/Q56/Q58/Q62 are artifact/range text and Q77/Q99 quoted tool output, none ever opened — the record-nested set is **9** (Q41,Q42,Q46,Q47,Q50,Q51,Q52,Q53,Q63). His result satisfies the rule; my criterion was wrong. - **Nothing operational.** Open set returns to Q37 `:5278` (pipe) + career-lane Q53 `:7303` (held for Alexander). No issue, PR, release or deploy surface; no counterparty messaged; no another-party file edited; no secret printed. + +--- + +**Volt tick 2026-10-17 22:2x–22:5xZ — the "could not read" class gets ONE code (rc 2) and a gate that measures it on every tool: 11 of 15 broken-input probes were mis-coded at `461eede`, 15 of 15 measure rc 2 at `6ee8fce`.** (Pure suffix append; clock read immediately before this edit; the last line at `461eede` was the control-plane sign-off above, so nothing above this anchor was touched. **No queue item opened or closed** — the claim check's open set is unchanged: Q37 `:5278` (pipe, not this lane) and career-lane Q53 `:7303` (held for Alexander) — so the unit taken was the carry my own check-in filed and reply 18 left standing.) + +- **The carry, measured wider than it was filed.** `checkins/2026-10-17-volt.md:525-527` filed two tools (`check_lint`, `census_row_delta`) using rc 1 for "a graded fault" and "I could not read your file" alike. Probing all eleven tools found **six**, across **three codes**: `append_only_audit` and `append_only_owners` exited **1 out of a raw traceback** (missing repo, missing/non-UTF-8 audit JSON), `census_row_delta` and `check_lint` exited **1** with a named message, `selftest_sweep` exited **1** with "0 tools, nothing discovered", and the two queue readers exited **3**. rc 1 is the *verdict* code — `check_lint --check 'true' --fail-on-fault` exits 1 for a TAUTOLOGY — so a caller reading codes (the Ralph runner at `docs/ralph-loop.md`, which decides GREEN on the exit code alone) could not tell "your gate is stale" from "your gate never ran". +- **Decision, and a reversal of my own last check-in.** Three codes, no others: **rc 0** ran clean, **rc 1** ran and graded a fault, **rc 2** could not grade (usage, precondition, unreadable input). **rc 3 is retired.** The previous check-in (`:519-523`) codified a two-code split — "3 = queue unreadable, 2 = precondition failed" — instead of reconciling it; that was a codification, not a rule, and it is superseded here by measurement. 2 and not 3 because five tools already used 2 (both citation scanners, `doc_census_check`, `landing_check`, argparse itself) and `queue_index` already used 2 *inside one file* for the neighbouring `UNVERIFIABLE` answer; unifying on 2 retires one code and moves two tools, unifying on 3 would have moved six. +- **The part that outlives the fix.** `tools/selftest_sweep.py` now runs a **read-refusal axis** in the same command: **15 probes** (11 missing-input, 4 non-UTF-8) against the real CLI in a throwaway cwd, graded `OK` / `RC_NOT_2` / `TRACEBACK` / `SILENT`, fatal on the last three, `NO_PROBE` advisory so a new tool is visible rather than skipped. **It discriminates:** the same gate run against `HEAD`'s copies of the eleven tools (`--tools-dir ab-head-tools/`, materialised with `git show 461eede:tools/`) reads **15 probes, 4 ok, 11 fault (2 TRACEBACK, 9 RC_NOT_2)** and exits 1; against this tree it reads **15 probes, 15 ok, 0 fault** and exits 0. +- **Verified at `6ee8fce`, this host.** `git show --numstat 6ee8fce` = **238/35 across nine files**, author `Volt `. `selftest_sweep` → **`sweep: 11 tools, 11 OK, 0 fatal`** (the last advisory row is gone: `doc_census_check` now advertises its own printed count on its `--selftest` line) plus `read-refusal: 15 probes, 15 ok, 0 fault`; `--json` reads `ok=11 fatal=0 read_fatal=0 axis_rows=15`. Selftests all rc 0: 18/18, 15/15, 33/33, 37/37, 54/54, 16/16, 22/22 (the sweep gained four cells, one per class: OK, RC_NOT_2, TRACEBACK, SILENT). Graded faults still exit **1** after the change (`check_lint --check 'true' --fail-on-fault` → 1 TAUTOLOGY, `queue_claim_check --validate` → 1), so the move touched the unreadable class only. +- **The queue gate did not move.** `queue_index.py --check docs/queue-index.md` → **rc 0**, `49 sections, 45 ids, 4 continuation sections, 9 nested ids` — re-rendered in this commit because this block appends to the queue, and it must return rc 0 at the commit it lands in. +- **Reply 18's attribution FYI, repaired without rewriting history.** `.mailmap` gains four lines folding volt's spellings to `Volt `; measured, a detached worktree at `461eede` reads **five volt lines (19+7+3+1+1 = 31 commits)**, this tree reads **one line, 31**. The commit itself carries the identity via `git -c user.name=Volt -c user.email=volt@agents.invalid` — the repo-local config on this host is another lane's last write and this lane does not overwrite shared state to get its own name right. +- **Carry out, filed not fixed:** the axis probes missing and non-UTF-8 input only; a tool that mis-codes a *decodable but malformed* input is not measured (the two file readers do refuse it at rc 2, but no probe asserts it), and the axis grades the code and the absence of a traceback, not the wording. +- **Nothing operational.** Open set unchanged (Q37 `:5278`, career-lane Q53 `:7303`); no issue, PR, release or deploy surface; no counterparty messaged; no another-party file edited; no secret printed. Artifact: `/root/.hermes/wizard-outputs/volt/2026-10-17-exit-codes/` (`decision.md`, `matrix-before.txt`, `matrix-after.txt`, `sweep-on-HEAD-tools.txt`, `sweep-6ee8fce.{txt,json}`, `shortlog-{before,after}.txt`). + +— Volt + diff --git a/checkins/2026-10-17-volt.md b/checkins/2026-10-17-volt.md index 101ed31..b65119d 100644 --- a/checkins/2026-10-17-volt.md +++ b/checkins/2026-10-17-volt.md @@ -527,3 +527,86 @@ being counted; copy-vs-copy is the valid method. Filed, not fixed: `check_lint.p file" — the message disambiguates, the code does not, and renumbering is a lane decision. Artifact: `/root/.hermes/wizard-outputs/volt/2026-10-17-input-error-class/run.md`. + +--- + +## 2026-10-17 22:2x–22:5xZ — the filed carry discharged: "could not read" gets one code (rc 2), and a gate that measures it on every tool + +**`6ee8fce`, nine files, 238/35, author `Volt `.** This run took +the carry the section above filed ("filed, not fixed: rc 1 for both a graded fault and an +input it could not read") and the attribution FYI reply 18 returned. Both are discharged, +and the second one is discharged *against my own previous conclusion*. + +**Measured wider than it was filed.** The carry named two tools. Probing all eleven with +18 broken-input and graded-fault cases (`probe_exit_codes.py`, `matrix-before.txt`) found +**six** tools and **three codes** carrying one meaning: + +``` +append_only_audit.py --repo rc 1 raw FileNotFoundError traceback +append_only_owners.py rc 1 raw FileNotFoundError traceback +append_only_owners.py rc 1 raw UnicodeDecodeError traceback +census_row_delta.py rc 1 cannot read census … +check_lint.py --log rc 1 cannot read log: … +selftest_sweep.py --repo rc 1 sweep: 0 tools, nothing discovered +queue_claim_check.py --queue rc 3 cannot read queue: … +queue_index.py --queue rc 3 cannot read queue: … +``` + +rc 1 is also the *verdict* code — `check_lint --check 'true' --fail-on-fault` exits 1 for +a TAUTOLOGY — so a caller that reads codes (the Ralph runner, `docs/ralph-loop.md`, decides +GREEN on the exit code alone) could not tell a stale gate from a gate that never ran. + +**The decision, and the correction to `:519-523` above.** Three codes, no others: **rc 0** +ran clean, **rc 1** ran and graded a fault, **rc 2** could not grade (usage, precondition, +unreadable input). **rc 3 is retired.** The section above codified "3 = queue unreadable, +2 = precondition failed" — that was a report of what the files did, not a rule, and +measuring it shows one meaning spread over two codes. 2 rather than 3 because five tools +already answered 2 (both citation scanners, `doc_census_check`, `landing_check`, argparse +itself) and `queue_index` already answered 2 inside one file for the neighbouring +`UNVERIFIABLE` case. + +**The gate, which is the durable half.** `tools/selftest_sweep.py` now runs a +**read-refusal axis**: 15 probes (11 missing-input, 4 non-UTF-8) against the real CLI in a +throwaway cwd, graded `OK` / `RC_NOT_2` / `TRACEBACK` / `SILENT`, fatal on the last three. +It discriminates, measured both ways on this host: + +``` +HEAD's own tools (--tools-dir ab-head-tools/, git show 461eede:tools/) + read-refusal: 15 probes, 4 ok, 11 fault (RC_NOT_2, TRACEBACK) exit 1 +this tree at 6ee8fce + read-refusal: 15 probes, 15 ok, 0 fault exit 0 +``` + +**Verified, this host, this work tree, at `6ee8fce`:** + +- `selftest_sweep` → `sweep: 11 tools, 11 OK, 0 fatal` (the pre-existing advisory + `doc_census_check NO_CLAIM` is gone: the tool now advertises the count it prints) and + `read-refusal: 15 probes, 15 ok, 0 fault`; `--json` → `ok=11 fatal=0 read_fatal=0 + axis_rows=15`. +- Selftests all rc 0: `append_only_audit` 18/18, `append_only_owners` 15/15, + `census_row_delta` 33/33, `check_lint` 37/37, `queue_index` 54/54, `queue_claim_check` + 16/16, `selftest_sweep` 22/22 (four new cells — one per read-axis class). +- Graded faults **still** exit 1 after the change (`check_lint --check 'true' + --fail-on-fault` → 1 TAUTOLOGY; `queue_claim_check --validate` → 1): the move touched the + unreadable class only, and that is the A/B that matters. +- `queue_index --check docs/queue-index.md` → rc 0 at the commit this lands in + (`49 sections, 45 ids, 4 continuation sections, 9 nested ids, 9953 lines / 1229541 + bytes`), which required regenerating the index in the same commit as the queue block. + +**Reply 18's attribution FYI.** `016d26e` landed as `Timmy` because this host's repo-local +`user.name`/`user.email` are Timmy's. Repair, no history rewrite: `.mailmap` gains four +lines folding volt's spellings to `Volt `; a detached worktree at +`461eede` reads **five volt lines (19+7+3+1+1 = 31)**, this tree reads **one line, 31**. +The commit carries its identity with `git -c`, so the shared repo config — another lane's +last write — is untouched. + +**Carry out, filed not fixed:** the axis probes missing and non-UTF-8 input only, so a tool +that mis-codes a *decodable but malformed* input is unmeasured (both file readers do refuse +that class at rc 2, but no probe asserts it), and it grades the code and the absence of a +traceback, not the wording. Precision note on my own count: the appendix says "11 of 15 +broken-input probes were mis-coded"; the honest split is **2 traceback rows + 9 wrong-code +rows = 11**, and 4 were already correct. + +Artifact: `/root/.hermes/wizard-outputs/volt/2026-10-17-exit-codes/decision.md` (with +`matrix-before.txt`, `matrix-after.txt`, `sweep-on-HEAD-tools.txt`, +`sweep-6ee8fce.{txt,json}`, `shortlog-{before,after}.txt`, `probe_exit_codes.py`). diff --git a/docs/queue-index.md b/docs/queue-index.md index b79c5e7..c1de23e 100644 --- a/docs/queue-index.md +++ b/docs/queue-index.md @@ -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-9937 | 332063 | opening | §9 follow-on — the home-directory channel *(Helm lane; Merlin)* | -- | +| 49 | Q45 | 7594-9953 | 337280 | opening | §9 follow-on — the home-directory channel *(Helm lane; Merlin)* | -- | ## Ids with no `## ` heading @@ -71,7 +71,7 @@ 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 | 92 | Q49 | BULLET+BOLD | BOLD-LEAD | +| Q53 | 7292 | 7246 | 94 | Q49 | BULLET+BOLD | BOLD-LEAD | | Q63 | 9918 | 9909 | 15 | 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`. @@ -217,7 +217,7 @@ The block below is the parse this document renders, byte for byte. `--check` com "form": "BOLD-LEAD", "id": "Q53", "line": 7292, - "refs": 92, + "refs": 94, "section": "Q49", "shape": "BULLET+BOLD" }, @@ -236,9 +236,9 @@ The block below is the parse this document renders, byte for byte. `--check` com "end_line": 8, "line": 1 }, - "queue_bytes": 1224324, - "queue_lines": 9937, - "queue_sha256": "bca65ec79e12cebd1e5a87ec27dcb137dc515c20722f50db7fe912080a02372e", + "queue_bytes": 1229541, + "queue_lines": 9953, + "queue_sha256": "34f1523c88ee67fa7b12643fb1664d1dd448af38ec19f39acc38235d7c9f11f9", "sections": [ { "bytes": 3139, @@ -817,11 +817,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": 332063, - "end_line": 9937, + "bytes": 337280, + "end_line": 9953, "id": "Q45", "line": 7594, - "lines": 2344, + "lines": 2360, "role": "opening", "role_detail": "", "status": null,