diff --git a/WORK-QUEUE.md b/WORK-QUEUE.md index dad3a3a..e6069e2 100644 --- a/WORK-QUEUE.md +++ b/WORK-QUEUE.md @@ -10376,3 +10376,23 @@ Verification at this commit: `served_drift_check.py --selftest` **22/22 rc 0**; Verification at this commit: `path_claim_check.py --selftest` **17/17 rc 0**; census at `64dee6b` **1,036 distinct / 7 missing / 720 external / 9 template**, `--fail-on-missing --baseline` **rc 0, 0 new**; RED **rc 1** and GREEN **rc 0** measured on one cloned tree; `selftest_sweep.py` **20 tools, 20 OK, 0 fatal** with both axes **25/25** and **23/23**; `doc_command_check.py` **61/61**; `tool_map.py --check` **rc 0**; `doc_census_check.py --tools tools/path_claim_check.py` **0 STALE**. `verify.py`'s check-in leg still reads RED for the reason recorded at `a013842` — zephyrus's two 2026-10-19 files, unchanged by this landing and not this lane's to rename. — Volt + +**path_claim_check 2026-10-20 22:26Z (volt, Workhorse) — the tool's own gate was red, on paths my own record named; ledger and docstring now say what is true.** No item opened or closed; the open set is unchanged (`Q37:5278` pipe, career-lane `Q53:7303` held for Alexander, `Q64`'s design question Alexander's). Appended at the foot with `docs/queue-index.md` re-rendered in the same commit. + +1. **The red, measured before anything was changed.** At `028e2d9`, `path_claim_check.py --fail-on-missing` → **rc 1**, `1042 distinct paths, 10 missing, 10 new against the baseline`. Seven of the ten were reviewed rows; the three new ones were `docs/bar.md` (1x, first `WORK-QUEUE.md:10362`), `recoveries/foo.md` (1x, same line) and `docs/never-written.md` (1x, `WORK-QUEUE.md:10368`). All three are paths **the tick block directly above** wrote down: two metasyntactic illustrations in the sentence describing the gap, and the probe filename point 4 records planting in a detached worktree. The instrument caught its author's own prose. That is the tool working, not failing. + +2. **Why the sentences were not edited.** The queue is append-only, so a wrong sentence stays; the ledger is the designed place for a stated reading. Each path was checked before a row was written: none is in the tree at HEAD, and `git log --all --diff-filter=A -- ` returns **0 commits** for all three. Three rows appended — `PLANTED` for the removed probe, `EXAMPLE` for the two illustrations — and the census now reads **10 entries, 10 matched, 0 new, 0 cleared, 0 dead**. + +3. **A sixth class, because none of the five was true.** `EXAMPLE` is now in `BASELINE_CLASSES`, with the reading written into both the tuple's comment and the ledger header: a metasyntactic illustration quoted as a path in prose about paths, not an assertion that a file exists. A new class is an escape hatch only if it is unearned; this one cannot tolerate a real file claim, because a row is still printed with its class on every run and a path that later appears is reported `CLEARED`. + +4. **Three docstring defects, all of the class this repo grades.** (a) The closed set was printed `(PLANTED, NOT_ADDED, HOST_ROUTE, RENAMED, SHORT_NAME, FOREIGN_TREE)` while the code has never accepted `HOST_ROUTE` — a reader following the docstring would have written a row that makes the tool rc 2; `FOREIGN_TREE` was missing from the prose. (b) "so a reader sees the eight exceptions" was a hardcoded count over a seven-row ledger. (c) "every MISSING path at HEAD is in `tools/path_claim_baseline.tsv`" is a claim about a moving revision and was false at `028e2d9`; it is now anchored to "the revision the ledger was last reviewed against", and the gate's behaviour is stated instead of the invariant. + +5. **Selftest 17 → 19, both new cells for promises nothing exercised.** `c18`: a ledger row naming a class outside the closed set is rc 2 — the docstring promised that exit code and no cell tested it. `c19`: the `EXAMPLE` class is accepted and its row is still printed. The docstring's own cell-count line moved 17 → 19 in the same edit, so `doc_census_check.py` keeps a MATCHES claim instead of turning STALE. + +6. **Verification at this commit.** `--selftest` **19 cells, 19 passed, 0 failed, rc 0**; `--fail-on-missing --baseline` **rc 0, 0 new**; `doc_census_check.py --tools tools/path_claim_check.py --fail` **0 INTERNAL SPLIT, 0 STALE claim(s), 4 claims checked, rc 0**; `tool_map.py --check docs/TOOLS.md` **rc 0**; `verify.py` **5 legs, 4 pass, 1 fault**, with `selftest-sweep` **20 tools, 20 OK, 0 fatal** and `append-audit`, `index-current`, `reply-headings` all passing. + +7. **The one red leg is not this landing's, and was not tolerated.** `checkin` fails on `checkins/2026-10-19-zephyrus.md` (`2ff4812`, 2026-10-19 13:07:13Z) and `checkins/2026-10-19-zephyrus-sovereignty.md` (`a013842`, 2026-10-19 23:44:47Z) — both landed after the ledger's last review (`3d58197`, 2026-10-19 10:00:55Z). Proven pre-existing on a **clean detached worktree of `028e2d9`** (`git status --porcelain` empty; same 2 new faults, rc 1), so nothing here caused it. A two-row tolerance was drafted and then **withdrawn**: turning another lane's red green on my reading alone is a stronger act than the stance already recorded here — the pair is not this lane's to rename. The owner's fix is one edit either way: two rows appended to `tools/checkin_baseline.tsv` with that reading, or a rename by zephyrus. Both files are one handle's 2026-10-19 day in two files, the shape the ledger already tolerates for zephyrus at `2026-10-06-zephyrus-wizards*.md`. + +8. **What it does not claim.** The 720 EXTERNAL paths are counted, never graded: no claim that they exist. `EXAMPLE` and `PLANTED` rows are tolerances with a reading, not proof of absence — both stay printed as MISSING on every run. And the gate is not green: 4 of 5 legs pass, and the fifth is named above. + +— Volt diff --git a/docs/queue-index.md b/docs/queue-index.md index 941ceb3..5532d53 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-10378 | 486124 | 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-10398 | 491061 | 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 | 143 | Q49 | BULLET+BOLD | BOLD-LEAD | +| Q53 | 7292 | 7246 | 144 | Q49 | BULLET+BOLD | BOLD-LEAD | | Q63 | 9918 | 9909 | 17 | Q45 | BULLET+BOLD | BOLD-LEAD | -| Q64 | 10308 | 10308 | 6 | Q45 | BULLET+BOLD | BOLD-LEAD | +| Q64 | 10308 | 10308 | 7 | 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": 143, + "refs": 144, "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": 6, + "refs": 7, "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": 1378385, - "queue_lines": 10378, - "queue_sha256": "c6c026156a649cee87360284f45524d4bf92336a6d62d535875f3ec053035148", + "queue_bytes": 1383322, + "queue_lines": 10398, + "queue_sha256": "83ffe34a6367b7865e3fed7dce0c25fb30a38be2154b3040dd322e1cf5241c21", "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": 486124, - "end_line": 10378, + "bytes": 491061, + "end_line": 10398, "id": "Q45", "line": 7594, - "lines": 2785, + "lines": 2805, "role": "opening", "role_detail": "", "status": "OPEN \u2014 awaiting Alexander's zoom/whole-shop answer; build is the pipe's.", diff --git a/tools/path_claim_baseline.tsv b/tools/path_claim_baseline.tsv index 9e16e62..a6041bf 100644 --- a/tools/path_claim_baseline.tsv +++ b/tools/path_claim_baseline.tsv @@ -9,7 +9,9 @@ # Classes: PLANTED (a file planted in a clone to measure a gate), NOT_ADDED (the # prose states the file was never added on any ref), RENAMED (the artifact exists # under a later name), SHORT_NAME (the prose cites an abbreviated form of a real -# artifact), FOREIGN_TREE (a path relative to another project's tree). +# artifact), FOREIGN_TREE (a path relative to another project's tree), EXAMPLE (a +# metasyntactic illustration quoted as a path -- foo/bar shape -- in prose about +# paths, not an assertion that a file exists). career-lane/ats-gate-census-draft.md RENAMED history under that name at f29425a..e1426e9; the artifact at HEAD is career-lane/ats-gate-census.md inbox/pending.json NOT_ADDED the queue states it was never added on any ref: git log --all --diff-filter=A -- inbox/pending.json -> no output recoveries/summary-fidelity-full.md SHORT_NAME the artifact is recoveries/summary-fidelity-full-clauses.md; the queue cites the short form @@ -17,3 +19,6 @@ checkins/2026-10-19-volt-02.md PLANTED planted in a clone of 3890c12 to measure checkins/2026-10-02-volt-b.md PLANTED planted in a clone of e98a34b as the backdated-name example; the citing sentence says so docs/release-engine-spec.md FOREIGN_TREE relative to another project's tree (src/, tests/): neither is tracked here replies/2026-10-19-to-volt-99.md PLANTED planted in a clone of 5defac9 to red the reply leg; the citing sentence says so +docs/never-written.md PLANTED planted in a detached worktree of 64dee6b as the red probe and removed after the measurement, so no ref holds it: git log --all --diff-filter=A -> 0 commits; WORK-QUEUE.md:10368 says so +docs/bar.md EXAMPLE a metasyntactic illustration in the sentence about the gap, not a file: WORK-QUEUE.md:10362 quotes "the record docs/bar.md" as the shape of a path claim; no ref ever held it +recoveries/foo.md EXAMPLE a metasyntactic illustration in the same sentence: WORK-QUEUE.md:10362 quotes "recoveries/foo.md" as the shape of a path claim; no ref ever held it diff --git a/tools/path_claim_check.py b/tools/path_claim_check.py index e9ec6e5..cb2f425 100644 --- a/tools/path_claim_check.py +++ b/tools/path_claim_check.py @@ -18,8 +18,11 @@ WHY THIS EXISTS scratch trees (`after/verify.txt`), host artifacts (`/root/crucible/...`), other repositories, served routes and URLs. Grading those as missing would be hundreds of false defects, so they are COUNTED and never graded. What is left - is small enough for a reader: every MISSING path at HEAD is in - `tools/path_claim_baseline.tsv` with the class that explains it. + is small enough for a reader: every MISSING path at the revision the ledger + was last reviewed against is in `tools/path_claim_baseline.tsv` with the class + that explains it, and `--fail-on-missing` fails on any the ledger does not + name -- so a revision that moves the corpus reds the gate until a reader has + looked. The census print is what says which revision that was. This docstring deliberately carries no census figures. The first draft did, and the leading-slash fix in the matcher moved every one of them (1,024 @@ -50,13 +53,13 @@ A FENCED BLOCK IS QUOTED MATERIAL, NOT THIS DOCUMENT'S PROSE -- the rule THE BASELINE, AND WHY THE FIRST CENSUS IS ITS LEDGER `\\t\\t`, one row per reviewed missing path, class from a - closed set (PLANTED, NOT_ADDED, HOST_ROUTE, RENAMED, SHORT_NAME, - FOREIGN_TREE). A row is a stated reading, not an exemption: `--fail-on-missing` - fails only on a MISSING path the ledger does not name, and every tolerated row - is still PRINTED with its class on every run, so a reader sees the eight - exceptions rather than trusting that there are none. A ledger row whose path - now exists is reported CLEARED, and a row naming a path the census no longer - produces is reported as a dead row -- the ledger cannot rot invisibly. + closed set (PLANTED, NOT_ADDED, RENAMED, SHORT_NAME, FOREIGN_TREE, EXAMPLE). + A row is a stated reading, not an exemption: `--fail-on-missing` fails only on + a MISSING path the ledger does not name, and every tolerated row is still + PRINTED with its class on every run, so a reader sees the tolerated rows + rather than trusting that there are none. A ledger row whose path now exists + is reported CLEARED, and a row naming a path the census no longer produces is + reported as a dead row -- the ledger cannot rot invisibly. EXIT CODES 0 the census ran. Without --fail-on-missing a MISSING path is not a fault. @@ -70,7 +73,7 @@ USAGE python3 path_claim_check.py [--repo DIR] [--rev HEAD] [--corpus PATH...] [--json OUT] [--only missing|exists|external|template|all] [--context] [--fail-on-missing] [--baseline PATH] - python3 path_claim_check.py --selftest # 17 cells + python3 path_claim_check.py --selftest # 19 cells python3 path_claim_check.py --repo . --fail-on-missing \\ --baseline tools/path_claim_baseline.tsv """ @@ -102,8 +105,13 @@ STRIP = "`*'\"()[]<>,;:." # The closed class set a baseline row may name. Each is a reason a MISSING path # is not a live defect; adding one is a deliberate edit to this tuple. +# EXAMPLE was added after the tool's own construction record landed and the next +# census found 3 new MISSING paths -- two quoted metasyntactic illustrations +# ("recoveries/foo.md", "the record docs/bar.md") and one red-probe filename +# that was planted in a detached worktree and never ref'd. None of the other +# classes was true of them, and the closed set is the place that says so. BASELINE_CLASSES = ("PLANTED", "NOT_ADDED", "RENAMED", "SHORT_NAME", - "FOREIGN_TREE") + "FOREIGN_TREE", "EXAMPLE") VERDICTS = ("EXISTS", "MISSING", "EXTERNAL", "TEMPLATE") @@ -493,6 +501,22 @@ def selftest(): cell("c17 a corpus with no markdown is rc 2, never an empty clean census", rc == 2 and "no markdown corpus" in out, "rc=%d %s" % (rc, out[-200:])) + # --- the ledger's closed set is enforced, not decorative ---------------- + badcls = os.path.join(td, "badclass.tsv") + with open(badcls, "w") as fh: + fh.write("docs/absent.md\tMADE_UP\tfixture: a class the tool does not know\n") + rc, out = run("--repo", repo, "--fail-on-missing", "--baseline", badcls) + cell("c18 a ledger row naming a class outside the closed set is rc 2", + rc == 2 and "unknown class" in out and "MADE_UP" in out, + "rc=%d %s" % (rc, out[-300:])) + excls = os.path.join(td, "example.tsv") + with open(excls, "w") as fh: + fh.write("docs/absent.md\tEXAMPLE\tfixture: a metasyntactic illustration\n") + rc, out = run("--repo", repo, "--fail-on-missing", "--baseline", excls) + cell("c19 the EXAMPLE class is accepted and its row still printed", + rc == 0 and "tolerated EXAMPLE" in out and "1 matched" in out, + "rc=%d %s" % (rc, out[-300:])) + print("selftest: %d cells, %d passed, %d failed" % (n, n - bad, bad)) return 0 if bad == 0 else 1