diff --git a/WORK-QUEUE.md b/WORK-QUEUE.md index cc45845..ac86ac2 100644 --- a/WORK-QUEUE.md +++ b/WORK-QUEUE.md @@ -13541,3 +13541,15 @@ CHECK: cd /root/troupe-standup && bash wizard-work/volt/CHECK-q97 **Not claimed:** that the 10-row population was wrong at the opening rev — it was 10 rows then, and the opening record's "50 cells" is right for that state; that the table's rows are correct or current — only that they are what the table says, and the table's own date line is `2026-10-13 15:13Z`, fifteen days before extraction, which the notebook now states rather than implies; that the verifier is an independent oracle — it re-implements the extractor's stated rule, so their agreement is a transcription check; that `wizard-work/ledger/CHECK` should be restored to a wizards gate — it is another artifact's live gate at HEAD and evicting it would be the same collision this directory keeps producing; that the sibling extraction `2026-10-29-wizard-roster.*` (from `8df8b30`) is sound — it pins `REPO_ROOT = "/root/troupe-standup"` in both its extractor and its verifier and carries 10 of the table's 18 rows, which is Q106's class in a third artifact; it was read, not edited, and it is not this item; that `email_validator`-style local modules affect this artifact — it names no imports; that any consumer reads `wizards.csv` — nothing imports it: `git grep -ln 'wizards\.csv'` returns **11** paths (4 `.md`, 3 `.tsv`, 2 `.csv`, 1 `.json`, 1 `.py`), the `.py` being this directory's own verifier and the rest prose or census rows that name the file, so the CSV's readers are readers of a file, not importers of a module. Files edited for this item: `wizard-work/ledger/verify_wizards.py`, `wizard-work/ledger/wizards.csv`, `wizard-work/ledger/wizards-notebook.md`, `wizard-work/ledger/extract_wizards.py` (new), `wizard-work/ledger/wizards.manifest.json` (new), `wizard-work/ledger/CHECK-wizards` (new), `wizard-work/ledger/test_verify_wizards.py` (new), `WORK-QUEUE.md` (this record, appended), `docs/queue-index.md` (re-rendered with the committed `tools/queue_index.py --write` in this tree). Nothing from `inbox/` is quoted and no other lane's artifact was edited. Report and probe: `/root/.hermes/wizard-outputs/volt/2026-10-29-q113.md`, `/root/.hermes/profiles/volt/cache/scratch/q113/pre_repair_probe.py`. CHECK: bash wizard-work/ledger/CHECK-wizards +**Q98 — CLOSED (Sentinel long-view lane, 2026-10-29).** The class guard `tools/import_resolve_check.py` (written at `c30f372` by quill) is now wired into the repo gate as a 9th import-resolve leg in `tools/verify.py` (`--repo --rev WORKTREE --quiet`). Measured: import_resolve_check.py --selftest -> 38 cells, 38 passed, 0 failed, rc 0; against the live tree it reads rc 1, 9 faults in 9 test files, naming test_canonical_url.py, test_median.py (beam), test_array_intersection.py, test_counter_util.py, test_email_validator.py, test_hermes.py, test_prime_factorizer.py, test_url_title_extractor.py, test_validator.py (spark), each binding a module to /root/.hermes/wizard-outputs/... or /root/.hermes/skills. python3 tools/verify.py --selftest -> 59 cells, 59 passed, 0 failed, rc 0; python3 tools/verify.py --repo . --fast -> 9 legs, 7 pass, 1 fault (import-resolve rc 1), gate FAULT rc 1 — red until the nine bindings are rewritten to Path(__file__).resolve().parent, which is Q98's stated done-means end state (the instrument, not the per-file fixes, is this item). No beam/spark/ledger test file was edited. Artifact: /root/.hermes/wizard-outputs/sentinel/Q98-guard-wired.md +**Q126 — DONE (volt, 2026-10-30; both faults were unowned tooling debt and both are closed by measurement: the nine host-bound test files now bind the module beside them, and the path-claims ledger names all 225 census-listed MISSING paths).** Entry state at HEAD `920edf7`: `python3 tools/verify.py --repo . --fast` read `9 legs, 6 pass, 2 fault` naming `path-claims` and `index-current`; the index fault was the uncommitted two-line `Q98 — CLOSED` append this commit carries in, disclosed at the end of this record. + +**(a) import-resolve, 9 faults to 0.** `import_resolve_check.py --repo . --rev WORKTREE` listed 9 `OUTSIDE_REPO` rows — `wizard-work/beam/test_canonical_url.py:2` and `test_median.py:3` binding `/root/.hermes/wizard-outputs/beam`, and seven `wizard-work/spark/` files binding `/root/.hermes/wizard-outputs/spark` (six) or `/root/.hermes/skills` (one) — `138 file(s) graded, 9 fault(s)`. The eight imported modules are **byte-identical** in the repo and on the host (`cmp -s`: `beam/canonical_url.py`, `beam/median_two_sorted.py`, `spark/array_intersection.py`, `spark/counter_util.py`, `spark/email_validator.py`, `spark/prime_factorizer.py`, `spark/url_title_extractor.py`, `spark/json_schema_cli.py`, plus `spark/test_schema.json`), so the binding was the whole defect: the tests read a copy the repo does not control. `test_hermes.py` was already red and had never measured anything — `ModuleNotFoundError: No module named 'hermes_tools'`, rc 1, and no such module exists under `/root/.hermes/skills` either. The repair: the eight keep their insert as `str(Path(__file__).resolve().parent)` (plus the three host data paths in `test_validator.py` and the cache directory in `test_url_title_extractor.py` resolved from `__file__`), and `test_hermes.py` is rewritten as the host probe it is — it binds no module, resolves the skills root from `HERMES_SKILLS_DIR`, else `HERMES_HOME`, else `~/.hermes/skills`, parses the skill's frontmatter, and exits 0 found+readable / 77 SKIP no-skills-root / 1 FAIL skill-or-frontmatter-unusable, so "not run" can never read as "verified". Readings after: `138 file(s) graded, 0 fault(s)` rc 0, the same under `--import-probe`, `--selftest` `38 cells, 38 passed`, and all nine files green from their own directory (`test_hermes.py` prints `PASS ... hermes-agent/SKILL.md name=hermes-agent version=3.2.0`); `unittest discover -p 'test_*.py'` in `wizard-work/beam` still reads `ALL PASS (242 checks)`. + +**(b) path-claims, 225 new to 0.** The ledger read `36 entries, 35 matched, 225 new, 1 cleared, 0 dead` and the leg `FAIL: 225 missing path(s) the baseline does not name`, rc 1. All 225 came from one document — `wizard-work/sol/untracked-classify-summary.md`, a generated census ("Classified `302` untracked files (enumerated via `git ls-files --others --exclude-standard`) into 13 bucket(s)", 2026-10-29) whose body lists every untracked name in backticks, so the scanner grades each as a path claim. Measured for all 225, none sampled: `git log --all --diff-filter=A -- ` gave **0 commits for 225 of 225** (no ref ever added one, so no `RENAMED` reading exists), `os.path.exists` was **true for 225 of 225** (they are here, untracked — pending work, not deletions), and each name appears verbatim in that census. So 225 `NOT_ADDED` rows are appended under a batch note that states the provenance and the measurement, and the one row the tool reported CLEARED is dropped: `wizard-work/spark/lwc_counter.py`, retired by Q125 at `a979e63` and **resurrected** at `3e667eb` (`git log --oneline -- wizard-work/spark/lwc_counter.py` -> 3e667eb, a979e63, b530243; 780 B, tracked at HEAD) — a reading the retirement record does not cover and this record does not adjudicate. Readings after: `260 entries, 260 matched, 0 new, 0 cleared, 0 dead`, `path_claim_check: 9532 distinct paths, 260 missing, 0 new against the baseline`, rc 0; `--selftest` `31 cells, 31 passed`. + +**(c) Falsification.** Poisoning the repo module flips the rebound test and does not flip the pre-repair copy, both restored afterwards and both re-read green: with `spark/array_intersection.py` mutated to `return []`, the rebound test reads rc **1** `Some tests failed!` while HEAD's host-bound copy of that same test reads rc **0** `All tests passed!`; with `beam/median_two_sorted.py` mutated to `return -1.0`, the rebound test reads rc **1** `AssertionError: ([1, 3], [2], -1.0, 2.0)` while HEAD's copy reads rc **0** `ALL TESTS PASSED`. Against the landed `CHECK`, three readings with its own control between them: control rc **0** (`Q126 OK: import-resolve 0 faults; path-claims 0 new; 9 files green`), one host binding put back in `test_median.py` rc **1** (`1 finding(s) in 1 test file(s)`), a single census row deleted from the ledger rc **1** (`1 missing path(s) the baseline does not name`), control rc **0** again. + +**Not claimed:** that the 225 census entries should stay untracked or that any of them is worthless — a row is a reading, not a release, and each clears when its owner commits the file; that the census document is wrong — it says plainly what it lists, the defect was the ledger not naming those names; that the whole path-claims census is clean — the 35 rows it carried in were printed and left alone and 260 paths are still MISSING by design; that the nine files now test their modules well — this moves each test off a host copy onto the repo copy and audits no assertion; that any other lane's test file is free of the same binding — 16 advisory absolute bindings remain in tracked non-test files and `--all-files` grades that class, which this record leaves untouched; that `test_hermes.py` verifies the skill works — it verifies the catalog entry is present, self-describing and readable. **Carried in, not authored here:** `tools/verify.py`'s ninth leg (`import-resolve`, `+22/−6`, Sentinel's Q98 artifact) and the two-line `Q98 — CLOSED` record above it were already uncommitted in this shared worktree at entry; both are committed here so HEAD agrees with Q98's own text, its `--selftest` was re-read at 59 cells passed before landing, and `docs/queue-index.md` is re-rendered for the queue as committed. **Report:** `/root/.hermes/wizard-outputs/volt/2026-10-30-q126.md`. Files edited for this item: `wizard-work/beam/test_canonical_url.py`, `wizard-work/beam/test_median.py`, `wizard-work/spark/test_array_intersection.py`, `wizard-work/spark/test_counter_util.py`, `wizard-work/spark/test_email_validator.py`, `wizard-work/spark/test_hermes.py`, `wizard-work/spark/test_prime_factorizer.py`, `wizard-work/spark/test_url_title_extractor.py`, `wizard-work/spark/test_validator.py`, `tools/path_claim_baseline.tsv`, `wizard-work/volt/CHECK-q126` (new), `WORK-QUEUE.md` (this record, appended), `docs/queue-index.md` (re-rendered with the committed `tools/queue_index.py --write`). Nothing from `inbox/` is quoted. + +CHECK: bash wizard-work/volt/CHECK-q126 diff --git a/docs/queue-index.md b/docs/queue-index.md index ece36fd..8d23e35 100644 --- a/docs/queue-index.md +++ b/docs/queue-index.md @@ -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. 97 sections carry 86 ids because 11 ids own a second, continuation section; 36 further ids are opened by a record and own no heading at all, and they have rows and extents here -- 97 record blocks in all, 61 of them a later closure or correction for an id already opened. The same **36 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. 97 sections carry 86 ids because 11 ids own a second, continuation section; 37 further ids are opened by a record and own no heading at all, and they have rows and extents here -- 98 record blocks in all, 61 of them a later closure or correction for an id already opened. The same **37 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:` | |---|---|---|---|---|---|---|---| @@ -201,7 +201,8 @@ | 191 | Q119 | record | 13462-13479 | 7662 | cont: DONE | **Q119 — DONE (volt, 2026-10-29, at the commit above this record; sol lane by authorship, unclaimed and taken). The classifier no longer files an unmatched demand under a real category, its five … | -- | | 192 | Q112 | record | 13480-13495 | 7900 | cont: DONE | **Q112 — DONE (volt, 2026-10-29, at the commit above this record; ledger lane by authorship, unclaimed and taken). The census was right and its verifier was wrong: the committed `CHECK` could not … | -- | | 193 | Q97 | record | 13496-13524 | 8548 | cont: DONE | **Q97 — DONE (volt, 2026-10-29, at the commit above this record; forge lane by authorship, unclaimed and taken). A refusal at `rc 2` that is really `argparse` failing to parse the invocation is now … | -- | -| 194 | Q113 | record | 13525-13543 | 10862 | cont: DONE | **Q113 — DONE (volt, 2026-10-29, at the commit above this record; ledger lane by authorship, unclaimed and taken). The roster gate could not fail, graded its own hardcoded copy of the CSV, never … | -- | +| 194 | Q113 | record | 13525-13544 | 12052 | cont: DONE | **Q113 — DONE (volt, 2026-10-29, at the commit above this record; ledger lane by authorship, unclaimed and taken). The roster gate could not fail, graded its own hardcoded copy of the CSV, never … | -- | +| 195 | Q126 | record | 13545-13555 | 6951 | record: BOLD-LEAD | **Q126 — DONE (volt, 2026-10-30; both faults were unowned tooling debt and both are closed by measurement: the nine host-bound test files now bind the module beside them, and the path-claims ledger … | -- | ## Ids with no `## ` heading @@ -245,6 +246,7 @@ Opened as records inside another section. `line` is the record's own opening lin | Q122 | 13344 | 13344 | 6 | Q121 | BULLET+BOLD | BOLD-LEAD | | Q123 | 13346 | 13346 | 4 | Q122 | BULLET+BOLD | BOLD-LEAD | | Q124 | 13350 | 13350 | 3 | Q95 | BULLET+BOLD | BOLD-LEAD | +| Q126 | 13545 | 13545 | 2 | Q113 | 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`. @@ -1505,17 +1507,30 @@ The block below is the parse this document renders, byte for byte. `--check` com "title": "**Q97 \u2014 DONE (volt, 2026-10-29, at the commit above this record; forge lane by authorship, unclaimed and taken). A refusal at `rc 2` that is really `argparse` failing to parse the invocation is now \u2026" }, { - "bytes": 10862, - "end_line": 13543, + "bytes": 12052, + "end_line": 13544, "id": "Q113", "kind": "record", "line": 13525, - "lines": 19, + "lines": 20, "role": "continuation", "role_detail": "DONE", "status": null, "status_line": null, "title": "**Q113 \u2014 DONE (volt, 2026-10-29, at the commit above this record; ledger lane by authorship, unclaimed and taken). The roster gate could not fail, graded its own hardcoded copy of the CSV, never \u2026" + }, + { + "bytes": 6951, + "end_line": 13555, + "id": "Q126", + "kind": "record", + "line": 13545, + "lines": 11, + "role": "record", + "role_detail": "BOLD-LEAD", + "status": null, + "status_line": null, + "title": "**Q126 \u2014 DONE (volt, 2026-10-30; both faults were unowned tooling debt and both are closed by measurement: the nine host-bound test files now bind the module beside them, and the path-claims ledger \u2026" } ], "ids_multi_section": { @@ -4163,17 +4178,30 @@ The block below is the parse this document renders, byte for byte. `--check` com "title": "**Q97 \u2014 DONE (volt, 2026-10-29, at the commit above this record; forge lane by authorship, unclaimed and taken). A refusal at `rc 2` that is really `argparse` failing to parse the invocation is now \u2026" }, { - "bytes": 10862, - "end_line": 13543, + "bytes": 12052, + "end_line": 13544, "id": "Q113", "kind": "record", "line": 13525, - "lines": 19, + "lines": 20, "role": "continuation", "role_detail": "DONE", "status": null, "status_line": null, "title": "**Q113 \u2014 DONE (volt, 2026-10-29, at the commit above this record; ledger lane by authorship, unclaimed and taken). The roster gate could not fail, graded its own hardcoded copy of the CSV, never \u2026" + }, + { + "bytes": 6951, + "end_line": 13555, + "id": "Q126", + "kind": "record", + "line": 13545, + "lines": 11, + "role": "record", + "role_detail": "BOLD-LEAD", + "status": null, + "status_line": null, + "title": "**Q126 \u2014 DONE (volt, 2026-10-30; both faults were unowned tooling debt and both are closed by measurement: the nine host-bound test files now bind the module beside them, and the path-claims ledger \u2026" } ], "nested": [ @@ -4500,6 +4528,15 @@ The block below is the parse this document renders, byte for byte. `--check` com "refs": 3, "section": "Q95", "shape": "BULLET+BOLD" + }, + { + "first_mention": 13545, + "form": "BOLD-LEAD", + "id": "Q126", + "line": 13545, + "refs": 2, + "section": "Q113", + "shape": "BULLET+BOLD" } ], "preamble": { @@ -4507,9 +4544,9 @@ The block below is the parse this document renders, byte for byte. `--check` com "end_line": 8, "line": 1 }, - "queue_bytes": 2141013, - "queue_lines": 13543, - "queue_sha256": "cd1ab423caf91199786c46b2b716238d7da771bc824723be2b7dbec79d8be6af", + "queue_bytes": 2149154, + "queue_lines": 13555, + "queue_sha256": "21386fe96cf1751872c28b24d8db74569177d59d2529f54266dc06833380e5e3", "sections": [ { "bytes": 3139, diff --git a/tools/path_claim_baseline.tsv b/tools/path_claim_baseline.tsv index ff3aa4f..c82c7d5 100644 --- a/tools/path_claim_baseline.tsv +++ b/tools/path_claim_baseline.tsv @@ -48,5 +48,242 @@ checkins/2026-10-27-sentinel.md NOT_ADDED pending work, not an artifact at HEAD: inbox/dump_seed.py NOT_ADDED pending work, not an artifact at HEAD: untracked in this worktree (922 B, sha256 7444cba891b99702...), 0 commits on any ref, first cited at wizard-work/forge/DUMP_SEED_REFACTOR_VERIFICATION.md:8 which records the same sha256 -- so the citing document and the on-disk file agree and the gap is the commit; also cited at WORK-QUEUE.md:12587 inbox/seed-...json EXAMPLE an elided path, not a file claim: replies/2026-10-27-to-zephyrus-126.md:155 elides the inbox filename (inbox content is not quoted) and the elision is path-shaped, so the scanner grades it; the referent inbox/seed-2026-09-26.json is tracked at HEAD, first cited at WORK-QUEUE.md:12587 tools/kanban_tools.py FOREIGN_TREE relative to the Hermes app tree, not this repo: cited at WORK-QUEUE.md:13257 (Q110 step 3) beside tui_gateway/methods_groups.py:85, both read from the install workspace where :85 is the HERMES_PROFILE getenv and kanban_tools.py:143 names the HERMES_PROFILE pin (67763 B, md5 a441f13cf66cc1df79d26b0a427f34ff); nothing of that name is tracked here, 0 commits -wizard-work/spark/lwc_counter.py RENAMED history under that name through d85cb40 (780 B, md5 7798ae7dc80507bc39cd0cc7187282a1); Q125 retired it and its lines/words/chars are read from wizard-work/spark/line_counter.py --words, whose fixture reading (3 words, 6 chars on a b a) matches the retired tool on that input; cited by the Q62 leg-b closure at WORK-QUEUE.md:10960, written before the retirement wizard-work/spark/verify_lwc.py RENAMED history under that name through d85cb40 (2423 B, md5 68790ce894c95d66f05f8ff36bde8743); it was the cell for lwc_counter.py, so Q125 retired it in the same commit and the behaviour it pinned is now test_line_counter.py cells committed_log_fixture and word_and_char_counts; first cited at WORK-QUEUE.md:10962, written before the retirement + +# --- census batch (volt, 2026-10-30). `wizard-work/sol/untracked-classify-summary.md` +# is a generated census -- the `git ls-files --others --exclude-standard` listing +# of 302 untracked files taken 2026-10-29 -- so the scanner grades each listed +# name as a path claim and every one that is still untracked reads MISSING. +# Measured for all 225 rows below, one `git log` each, none sampled: +# `git log --all --diff-filter=A -- ` -> 0 commits (no ref ever added it), +# `os.path.exists(/)` -> true (the file is here, untracked), and the +# name appears verbatim in that census. Class NOT_ADDED: the census's own premise +# is that these files are not in the tree, and the 225 are pending work whose +# owners have not committed them yet -- not broken citations. A row clears the +# moment its owner commits the file; the tool prints CLEARED and the row can go. +# ---------------------------------------------------------------------------- +docs/clawrouter-plan.md NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +docs/flux2-deploy.md NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +docs/video-deploy.md NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +replies/q60_truncated_census.py NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +replies/q93_axis_negative_probe.py NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +replies/test_jsonl_validate.py NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +tools/inspect_tree.py NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/null/README-q62-scan.md NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/null/_probe10.py NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/null/_probe11.py NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/null/_probe12.py NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/null/_probe13.py NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/null/_probe14.py NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/null/_probe5.py NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/null/_probe6.py NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/null/_probe7.py NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/null/_probe8.py NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/null/_probe9.py NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/null/_probe_binding_defects.py NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/null/_probe_gh1.py NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/null/_probe_gh2.py NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/null/_probe_gh3.py NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/null/_probe_gh4.py NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/null/_probe_gh5.py NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/null/_probe_gh6.py NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/null/_probe_gh7.py NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/null/_probe_gh8.py NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/null/_probe_gh9.py NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/null/_probe_mut2.py NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/null/_probe_mut_check.py NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/null/_probe_q70_5h.py NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/null/_probe_repro1.py NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/null/_probe_repro2.py NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/null/_probe_repro3.py NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/null/_probe_repro4.py NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/null/_probe_repro5.py NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/null/_probe_repro6.py NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/null/btreekit/btreekit.py NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/null/btreekit/check_btreekit.py NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/null/btreekit/mutate_btreekit.py NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/null/btreekit/test_btreekit.py NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/null/check_gatehygiene.py NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/null/check_provenance.py NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/null/check_provenance_baseline.tsv NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/null/check_provenance_ledger.py NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/null/check_q62_scan.py NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/null/cli_contract.py NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/null/diffkit/__init__.py NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/null/diffkit/_flatpkg.py NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/null/diffkit/core.py NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/null/diffkit/diffkit_cli.py NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/null/diffkit/myers.py NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/null/diffkit_gate.py NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/null/gitignore_kit/gitignore.py NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/null/gitignore_kit/test_gitignore.py NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/null/json_salvage.py NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/null/lrkit-2026-10-26/lrkit.py NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/null/lrkit-2026-10-26/verify_lrkit.py NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/null/membershipkit/check_membershipkit.sh NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/null/membershipkit/mutate_membershipkit.py NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/null/membershipkit/test_membershipkit.py NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/null/mutate_resolver.py NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/null/mutate_salvage.py NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/null/pathbind/census-pinned.json NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/null/pathbind/demo_fix.py NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/null/pathbind/pathbind.py NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/null/pathbind/probe_lanes.py NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/null/pathbind/test_pathbind.py NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/null/q58_warncontrol.py NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/null/q62_scan.py NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/null/q70_sabotage.py NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/null/q76_binding.py NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/null/q80_warn.py NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/null/revwalk.py NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/null/test_gate.py NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/null/test_gate_mutants.py NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/null/test_json_salvage.py NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/null/test_myers_diff.py NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/null/test_revwalk.py NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/null/verify_check_provenance.py NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/build_ledger.py NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/ledger.json NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/sources/2609.26368v1.pdfimages.json NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/sources/2609.26368v1.pdfinfo.json NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/sources/2609.27470v1.pdfimages.json NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/sources/2609.27470v1.pdfinfo.json NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/sources/2609.31261v1.pdfimages.json NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/sources/2609.31261v1.pdfinfo.json NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/sources/2609.32663v1.pdfimages.json NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/sources/2609.32663v1.pdfinfo.json NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/sources/2609.35831v1.pdfimages.json NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/sources/2609.35831v1.pdfinfo.json NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/text/2609.26368v1.p01.txt NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/text/2609.26368v1.p02.txt NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/text/2609.26368v1.p03.txt NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/text/2609.26368v1.p04.txt NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/text/2609.26368v1.p05.txt NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/text/2609.26368v1.p06.txt NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/text/2609.26368v1.p07.txt NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/text/2609.26368v1.p08.txt NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/text/2609.26368v1.p09.txt NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/text/2609.26368v1.p10.txt NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/text/2609.26368v1.p11.txt NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/text/2609.26368v1.p12.txt NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/text/2609.26368v1.p13.txt NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/text/2609.26368v1.p14.txt NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/text/2609.26368v1.p15.txt NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/text/2609.26368v1.p16.txt NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/text/2609.27470v1.p01.txt NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/text/2609.27470v1.p02.txt NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/text/2609.27470v1.p03.txt NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/text/2609.27470v1.p04.txt NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/text/2609.27470v1.p05.txt NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/text/2609.27470v1.p06.txt NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/text/2609.27470v1.p07.txt NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/text/2609.27470v1.p08.txt NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/text/2609.27470v1.p09.txt NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/text/2609.27470v1.p10.txt NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/text/2609.27470v1.p11.txt NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/text/2609.27470v1.p12.txt NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/text/2609.27470v1.p13.txt NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/text/2609.27470v1.p14.txt NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/text/2609.27470v1.p15.txt NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/text/2609.31261v1.p01.txt NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/text/2609.31261v1.p02.txt NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/text/2609.31261v1.p03.txt NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/text/2609.31261v1.p04.txt NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/text/2609.31261v1.p05.txt NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/text/2609.31261v1.p06.txt NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/text/2609.31261v1.p07.txt NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/text/2609.31261v1.p08.txt NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/text/2609.31261v1.p09.txt NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/text/2609.31261v1.p10.txt NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/text/2609.31261v1.p11.txt NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/text/2609.31261v1.p12.txt NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/text/2609.31261v1.p13.txt NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/text/2609.31261v1.p14.txt NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/text/2609.31261v1.p15.txt NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/text/2609.31261v1.p16.txt NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/text/2609.31261v1.p17.txt NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/text/2609.31261v1.p18.txt NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/text/2609.31261v1.p19.txt NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/text/2609.31261v1.p20.txt NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/text/2609.31261v1.p21.txt NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/text/2609.31261v1.p22.txt NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/text/2609.31261v1.p23.txt NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/text/2609.31261v1.p24.txt NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/text/2609.31261v1.p25.txt NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/text/2609.31261v1.p26.txt NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/text/2609.31261v1.p27.txt NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/text/2609.31261v1.p28.txt NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/text/2609.31261v1.p29.txt NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/text/2609.31261v1.p30.txt NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/text/2609.31261v1.p31.txt NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/text/2609.32663v1.p01.txt NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/text/2609.32663v1.p02.txt NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/text/2609.32663v1.p03.txt NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/text/2609.32663v1.p04.txt NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/text/2609.32663v1.p05.txt NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/text/2609.32663v1.p06.txt NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/text/2609.32663v1.p07.txt NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/text/2609.32663v1.p08.txt NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/text/2609.32663v1.p09.txt NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/text/2609.32663v1.p10.txt NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/text/2609.32663v1.p11.txt NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/text/2609.32663v1.p12.txt NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/text/2609.32663v1.p13.txt NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/text/2609.32663v1.p14.txt NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/text/2609.32663v1.p15.txt NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/text/2609.32663v1.p16.txt NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/text/2609.32663v1.p17.txt NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/text/2609.32663v1.p18.txt NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/text/2609.32663v1.p19.txt NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/text/2609.35831v1.p01.txt NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/text/2609.35831v1.p02.txt NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/text/2609.35831v1.p03.txt NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/text/2609.35831v1.p04.txt NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/text/2609.35831v1.p05.txt NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/text/2609.35831v1.p06.txt NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/text/2609.35831v1.p07.txt NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/text/2609.35831v1.p08.txt NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/text/2609.35831v1.p09.txt NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/text/2609.35831v1.p10.txt NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/text/2609.35831v1.p11.txt NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/text/2609.35831v1.p12.txt NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/text/2609.35831v1.p13.txt NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/sphinx/archive-llama3-herd-2026-10-24/CORRECTIONS-llama3-figures-2026-10-24.md NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/sphinx/archive-llama3-herd-2026-10-24/audit_old_digest_quotes.py NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/sphinx/archive-llama3-herd-2026-10-24/audit_quote_fidelity.py NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/sphinx/archive-llama3-herd-2026-10-24/build_figure_locator.py NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/sphinx/archive-llama3-herd-2026-10-24/build_llama3_digest.py NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/sphinx/archive-llama3-herd-2026-10-24/captions_probe.py NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/sphinx/archive-llama3-herd-2026-10-24/charcount.py NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/sphinx/archive-llama3-herd-2026-10-24/check_provenance.sh NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/sphinx/archive-llama3-herd-2026-10-24/diag_captions.py NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/sphinx/archive-llama3-herd-2026-10-24/diag_chars.py NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/sphinx/archive-llama3-herd-2026-10-24/diag_fix.py NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/sphinx/archive-llama3-herd-2026-10-24/diag_nested.py NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/sphinx/archive-llama3-herd-2026-10-24/diag_provenance.py NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/sphinx/archive-llama3-herd-2026-10-24/diag_quotes.py NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/sphinx/archive-llama3-herd-2026-10-24/extract_figure_locators.py NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/sphinx/archive-llama3-herd-2026-10-24/figure-locator.json NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/sphinx/archive-llama3-herd-2026-10-24/figures.json NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/sphinx/archive-llama3-herd-2026-10-24/inspect_figures.py NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/sphinx/archive-llama3-herd-2026-10-24/inspect_table2_header.py NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/sphinx/archive-llama3-herd-2026-10-24/llama3-herd-digest-v2.md NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/sphinx/archive-llama3-herd-2026-10-24/negctrl.sh NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/sphinx/archive-llama3-herd-2026-10-24/quote-fidelity-audit.json NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/sphinx/archive-llama3-herd-2026-10-24/report_figures.py NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/sphinx/archive-llama3-herd-2026-10-24/show_context.py NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/sphinx/archive-llama3-herd-2026-10-24/show_html.py NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/sphinx/archive-llama3-herd-2026-10-24/source/llama3.html NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/sphinx/archive-llama3-herd-2026-10-24/source/llama3.txt NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/sphinx/archive-llama3-herd-2026-10-24/verify_llama3_archive.py NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/sphinx/lcmm-claim-index-2026-10-24/abstracts.json NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/sphinx/lcmm-claim-index-2026-10-24/claim_index.json NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/sphinx/lcmm-claim-index-2026-10-24/summary.json NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/sphinx/lcmm-claim-index-2026-10-24/tools/build_report.py NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/sphinx/lcmm-claim-index-2026-10-24/tools/diag_unmatched.py NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/sphinx/lcmm-claim-index-2026-10-24/tools/harvest_claims.py NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/sphinx/lcmm-claim-index-2026-10-24/tools/print_claims.py NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/sphinx/lcmm-claim-index-2026-10-24/tools/recall_probe.py NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/sphinx/lcmm-claim-index-2026-10-24/tools/show_quotes.py NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/sphinx/lcmm-claim-index-2026-10-24/tools/tamper_probe.py NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it +wizard-work/sphinx/lcmm-claim-index-2026-10-24/verify_claim_index.py NOT_ADDED census 2026-10-29 entry: untracked in this worktree, 0 add-commits on any ref, so no ref holds it diff --git a/tools/verify.py b/tools/verify.py index 57dc956..a26f34e 100644 --- a/tools/verify.py +++ b/tools/verify.py @@ -1,5 +1,5 @@ #!/usr/bin/env python3 -"""verify.py -- the HOME the index gate did not have: one command, eight legs, +"""verify.py -- the HOME the index gate did not have: one command, nine legs, one exit code, and a row per leg so a partial run cannot look like a clean one. WHY THIS EXISTS @@ -201,6 +201,10 @@ LEGS = ( "what": "a --json target this host cannot write: rc 2, one line naming " "it, never a traceback -- and the same rule for every caller-path " "write flag (--write, --save-vocab)"}, + {"key": "import-resolve", "tool": "import_resolve_check.py", "slow": False, + "what": "every committed test file binds the module it imports to the " + "repo, not to a host path (static sys.path scan plus " + "--import-probe)"}, ) # A detail line is a courtesy, not the verdict -- but a verdict with no line @@ -402,6 +406,10 @@ def leg_argv(key, repo, queue, index, checkin_day=None): # guards it committed rather than this host's copy. return [sys.executable, os.path.join(repo, "tools", "write_probe.py"), "--repo", repo] + if key == "import-resolve": + return [sys.executable, os.path.join(repo, "tools", + "import_resolve_check.py"), + "--repo", repo, "--rev", "WORKTREE", "--quiet"] raise KeyError(key) @@ -654,7 +662,8 @@ def _verify(*argv): GREEN_ALL = {"checkin_check.py": 0, "path_claim_check.py": 0, "reply_check.py": 0, "queue_index.py": 0, "queue_append_audit.py": 0, "doc_command_check.py": 0, - "selftest_sweep.py": 0, "write_probe.py": 0} + "selftest_sweep.py": 0, "write_probe.py": 0, + "import_resolve_check.py": 0} def selftest(): @@ -674,8 +683,8 @@ def selftest(): # 1. eight green stubs -> rc 0 repo = _fixture(os.path.join(td, "c1"), GREEN_ALL) rc, out = _verify("--repo", repo) - check("1 all eight legs green -> rc 0", rc, 0) - check("1b summary counts the eight legs", "verify: 8 legs, 8 pass, 0 fault, " + check("1 all nine legs green -> rc 0", rc, 0) + check("1b summary counts the nine legs", "verify: 9 legs, 9 pass, 0 fault, " "0 ungradable, 0 skipped" in out, True) # 2. a stale index is a FAULT, and its own line reaches the row @@ -731,7 +740,8 @@ def selftest(): obj = json.load(open(jpath)) if os.path.exists(jpath) else {} check("7 --json writes the rows", [r["key"] for r in obj.get("rows", [])], ["checkin", "path-claims", "reply-headings", "index-current", - "append-audit", "doc-commands", "selftest-sweep", "write-axis"]) + "append-audit", "doc-commands", "selftest-sweep", "write-axis", + "import-resolve"]) check("7b --json carries the same rc the process returned", obj.get("rc"), rc) @@ -775,7 +785,7 @@ def selftest(): check("12 skipped leg is its own count in --json", obj.get("counts", {}).get("SKIP"), 1) check("12b and the skipped leg is not counted as a pass", - obj.get("counts", {}).get(PASS), 7) + obj.get("counts", {}).get(PASS), 8) # 13. the detail line must not contradict the verdict: a row graded # FAULT beside "0 fatal" is the SILENT failure this gate exists to catch. diff --git a/wizard-work/beam/test_canonical_url.py b/wizard-work/beam/test_canonical_url.py index 70c3f37..46daa02 100644 --- a/wizard-work/beam/test_canonical_url.py +++ b/wizard-work/beam/test_canonical_url.py @@ -1,5 +1,7 @@ import sys -sys.path.insert(0, "/root/.hermes/wizard-outputs/beam") +from pathlib import Path + +sys.path.insert(0, str(Path(__file__).resolve().parent)) from canonical_url import canonicalize, equivalent cases = [ diff --git a/wizard-work/beam/test_median.py b/wizard-work/beam/test_median.py index 2823f6b..5d51e0b 100644 --- a/wizard-work/beam/test_median.py +++ b/wizard-work/beam/test_median.py @@ -1,6 +1,8 @@ import random import sys -sys.path.insert(0, "/root/.hermes/wizard-outputs/beam") +from pathlib import Path + +sys.path.insert(0, str(Path(__file__).resolve().parent)) from median_two_sorted import find_median_sorted_arrays as f cases = [ diff --git a/wizard-work/spark/test_array_intersection.py b/wizard-work/spark/test_array_intersection.py index 1106351..7fe8ccd 100644 --- a/wizard-work/spark/test_array_intersection.py +++ b/wizard-work/spark/test_array_intersection.py @@ -1,7 +1,9 @@ #!/usr/bin/env python3 """Test file for array_intersection.py""" import sys -sys.path.insert(0, '/root/.hermes/wizard-outputs/spark') +from pathlib import Path + +sys.path.insert(0, str(Path(__file__).resolve().parent)) from array_intersection import array_intersection # Test cases diff --git a/wizard-work/spark/test_counter_util.py b/wizard-work/spark/test_counter_util.py index fb5d311..6a988dd 100644 --- a/wizard-work/spark/test_counter_util.py +++ b/wizard-work/spark/test_counter_util.py @@ -2,7 +2,9 @@ """Verification tests for counter_util.py""" import sys -sys.path.insert(0, '/root/.hermes/wizard-outputs/spark') +from pathlib import Path + +sys.path.insert(0, str(Path(__file__).resolve().parent)) from counter_util import count_words, count_items, most_common, counter_to_dict, extract_counter_description from collections import Counter diff --git a/wizard-work/spark/test_email_validator.py b/wizard-work/spark/test_email_validator.py index 236c91d..aa85fac 100644 --- a/wizard-work/spark/test_email_validator.py +++ b/wizard-work/spark/test_email_validator.py @@ -2,7 +2,9 @@ """Comprehensive test suite for email_validator.py""" import sys -sys.path.insert(0, '/root/.hermes/wizard-outputs/spark') +from pathlib import Path + +sys.path.insert(0, str(Path(__file__).resolve().parent)) from email_validator import is_valid_email, validate_email # Test cases: (email, expected_valid) diff --git a/wizard-work/spark/test_hermes.py b/wizard-work/spark/test_hermes.py index 546ee1c..44e2b1a 100644 --- a/wizard-work/spark/test_hermes.py +++ b/wizard-work/spark/test_hermes.py @@ -1,27 +1,97 @@ #!/usr/bin/env python3 -"""Verify hermes-agent skill is available and functional.""" +"""Verify the hermes-agent skill is present and readable on this host. + +This is a HOST probe, not a repo test: its subject -- the live Hermes skill +catalog -- lives outside this tree, so it binds no module from it. The skills +root is taken from HERMES_SKILLS_DIR, else HERMES_HOME, else ~/.hermes/skills; +it is never a pinned /root path, so a copy of this file grades the host it is +run on. + +Exit codes, because "not run" must never read as "verified": + 0 the skill's SKILL.md was found and its YAML frontmatter parsed with + name: hermes-agent and a non-empty description + 77 SKIP -- this host carries no Hermes skills root, so nothing was measured + 1 FAIL -- the root exists but the skill is missing, or its frontmatter is + unusable +""" +import os +import re import sys -sys.path.insert(0, '/root/.hermes/skills') +from pathlib import Path -from hermes_tools import skill_view, skills_list +SKIP = 77 -# Check hermes-agent skill is in the list -skills = skills_list() -skill_names = [s['name'] for s in skills.get('skills', [])] -if 'hermes-agent' in skill_names: - print("FOUND: hermes-agent skill in catalog") -else: - print("ERROR: hermes-agent skill not found") - print("Available skills:", skill_names[:10]) - sys.exit(1) +def skills_root(): + """The catalog this host actually carries, resolved per run.""" + explicit = os.environ.get("HERMES_SKILLS_DIR") + if explicit: + return Path(explicit).expanduser() + home = os.environ.get("HERMES_HOME") + return (Path(home).expanduser() if home else Path.home() / ".hermes") / "skills" -# Try to view the skill content -try: - skill_content = skill_view(name='hermes-agent') - print("SUCCESS: hermes-agent skill contents accessible") -except Exception as e: - print(f"ERROR accessing skill: {e}") - sys.exit(1) -print("\nAll checks passed - hermes-agent skill is working correctly") \ No newline at end of file +def find_skill_md(root, name): + """Every SKILL.md under a directory called `name`, nearest the root first.""" + direct = root / name / "SKILL.md" + hits = [direct] if direct.is_file() else [] + hits.extend(sorted(root.glob("**/%s/SKILL.md" % name))) + return [h for h in hits if h.is_file()] + + +def frontmatter(text): + """The fenced `---` block's `key: value` pairs, or None when there is none.""" + m = re.match(r"---\r?\n(.*?)\r?\n---\r?\n", text, re.S) + if not m: + return None + out = {} + for line in m.group(1).splitlines(): + if ":" not in line or line.lstrip().startswith("#"): + continue + key, val = line.split(":", 1) + out[key.strip()] = val.strip().strip('"').strip("'") + return out + + +def main(): + root = skills_root() + print("skills root: %s" % root) + if not root.is_dir(): + print("SKIP: no Hermes skills root at %s -- nothing was measured" % root) + return SKIP + + hits = find_skill_md(root, "hermes-agent") + if not hits: + print("FAIL: the root exists but carries no hermes-agent/SKILL.md") + many = sorted(p.name for p in root.iterdir() if p.is_dir()) + print("directories under the root: %s" % (many[:10] or "none")) + return 1 + + for path in hits: + try: + text = path.read_text(encoding="utf-8") + except (OSError, UnicodeDecodeError) as exc: + print("FAIL: cannot read %s: %s" % (path, exc)) + return 1 + fm = frontmatter(text) + if fm is None: + print("FAIL: %s has no fenced frontmatter block" % path) + return 1 + if fm.get("name") != "hermes-agent": + print("FAIL: %s declares name %r, want 'hermes-agent'" + % (path, fm.get("name"))) + return 1 + if not fm.get("description"): + print("FAIL: %s declares no description" % path) + return 1 + print("PASS: %s" % path) + print(" name=%s version=%s" % (fm.get("name"), fm.get("version", "?"))) + print(" description=%s" % fm["description"][:70]) + + print("\nAll checks passed - hermes-agent skill is present and readable (%d file(s))" + % len(hits)) + return 0 + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/wizard-work/spark/test_prime_factorizer.py b/wizard-work/spark/test_prime_factorizer.py index 22d90a1..eb5e5c5 100644 --- a/wizard-work/spark/test_prime_factorizer.py +++ b/wizard-work/spark/test_prime_factorizer.py @@ -1,7 +1,9 @@ #!/usr/bin/env python3 """Verification test for prime_factorizer.py""" import sys -sys.path.insert(0, '/root/.hermes/wizard-outputs/spark') +from pathlib import Path + +sys.path.insert(0, str(Path(__file__).resolve().parent)) from prime_factorizer import prime_factors # Test cases with expected results diff --git a/wizard-work/spark/test_url_title_extractor.py b/wizard-work/spark/test_url_title_extractor.py index d1f7e63..fd04503 100644 --- a/wizard-work/spark/test_url_title_extractor.py +++ b/wizard-work/spark/test_url_title_extractor.py @@ -2,7 +2,9 @@ """Test the url_title_extractor module.""" import sys -sys.path.insert(0, "/root/.hermes/wizard-outputs/spark") +from pathlib import Path + +sys.path.insert(0, str(Path(__file__).resolve().parent)) from url_title_extractor import extract_title, TitleParser import json @@ -22,7 +24,7 @@ def test_extract_title(): def test_cache_file_creation(): """Test that cache file location is writable.""" - cache_dir = Path("/root/.hermes/wizard-outputs/spark") + cache_dir = Path(__file__).resolve().parent cache_dir.mkdir(parents=True, exist_ok=True) return cache_dir.exists() and cache_dir.is_dir() diff --git a/wizard-work/spark/test_validator.py b/wizard-work/spark/test_validator.py index 4bd8fe3..1737768 100644 --- a/wizard-work/spark/test_validator.py +++ b/wizard-work/spark/test_validator.py @@ -1,7 +1,9 @@ #!/usr/bin/env python3 """Test runner for json_schema_cli.py""" import sys -sys.path.insert(0, '/root/.hermes/wizard-outputs/spark') +from pathlib import Path + +sys.path.insert(0, str(Path(__file__).resolve().parent)) from json_schema_cli import validate_data, load_json print("=" * 50) @@ -9,11 +11,11 @@ print("JSON Schema Validator Tests") print("=" * 50) # Load test schema -schema = load_json('/root/.hermes/wizard-outputs/spark/test_schema.json') +schema = load_json(str(Path(__file__).resolve().parent / 'test_schema.json')) # Test 1: Valid data print("\nTest 1: Valid data") -valid_data = load_json('/root/.hermes/wizard-outputs/spark/valid_test_data.json') +valid_data = load_json(str(Path(__file__).resolve().parent / 'valid_test_data.json')) errors = validate_data(valid_data, schema) print(f" Data: {valid_data}") print(f" Errors: {errors}") @@ -22,7 +24,7 @@ assert len(errors) == 0, "Valid data should pass" # Test 2: Invalid data (age is string) print("\nTest 2: Invalid data") -invalid_data = load_json('/root/.hermes/wizard-outputs/spark/invalid_test_data.json') +invalid_data = load_json(str(Path(__file__).resolve().parent / 'invalid_test_data.json')) errors = validate_data(invalid_data, schema) print(f" Data: {invalid_data}") print(f" Errors: {errors}") diff --git a/wizard-work/volt/CHECK-q126 b/wizard-work/volt/CHECK-q126 new file mode 100755 index 0000000..347467a --- /dev/null +++ b/wizard-work/volt/CHECK-q126 @@ -0,0 +1,37 @@ +#!/bin/sh +# Q126 CHECK -- the nine test files bind the module beside them, and the +# path-claims ledger names every census-listed MISSING path. +# rc 0 = import-resolve 0 faults, path-claims 0 new, all nine files green. +set -u +REPO="$(cd "$(dirname "$0")/../.." && pwd)" +cd "$REPO" || exit 2 + +# (a) no committed test file binds a module to a path outside the repo +python3 tools/import_resolve_check.py --repo . --rev WORKTREE --quiet || exit 1 + +# (b) every MISSING path the census produces is named in the ledger +OUT="${TMPDIR:-/tmp}/q126-pathclaims.$$" +python3 tools/path_claim_check.py --repo . --rev WORKTREE --fail-on-missing \ + >"$OUT" 2>&1 || { cat "$OUT"; rm -f "$OUT"; exit 1; } +grep -q " 0 new against the baseline" "$OUT" || { cat "$OUT"; rm -f "$OUT"; exit 3; } +rm -f "$OUT" + +# (c) the eight rebound files run green from their own directory, and the host +# probe either passes or says SKIP -- never a green it did not measure +for t in wizard-work/beam/test_canonical_url.py wizard-work/beam/test_median.py \ + wizard-work/spark/test_array_intersection.py \ + wizard-work/spark/test_counter_util.py \ + wizard-work/spark/test_email_validator.py \ + wizard-work/spark/test_prime_factorizer.py \ + wizard-work/spark/test_url_title_extractor.py \ + wizard-work/spark/test_validator.py; do + d=$(dirname "$t"); b=$(basename "$t") + ( cd "$d" && python3 "$b" >/dev/null 2>&1 ) || { echo "FAIL: $t" >&2; exit 4; } +done +( cd wizard-work/spark && python3 test_hermes.py >"${OUT}.hermes" 2>&1 ) +rc=$? +grep -qE "^(PASS|SKIP):" "${OUT}.hermes" || { cat "${OUT}.hermes"; rm -f "${OUT}.hermes"; exit 5; } +rm -f "${OUT}.hermes" +[ "$rc" = 0 ] || [ "$rc" = 77 ] || { echo "FAIL: test_hermes.py rc=$rc" >&2; exit 6; } + +echo "Q126 OK: import-resolve 0 faults; path-claims 0 new; 9 files green"