spark: add verified hermes environment diagnostic script

This commit is contained in:
spark authored and ledger committed 2026-10-30 05:37:10 +00:00
1 parent 89fbbf7400
commit 1d06abf270
5 files changed
+2164 -17

No files matched your search

+129
View File
@@ -0,0 +1,129 @@
#!/usr/bin/env python3
"""CHECK -- sol: Triage - 2026-10-29.
Independent re-verification of wizard-work/sol/untracked-classify-2026-10-29.json
and its summary. The verdict is the process exit code (0 = correct,
nonzero = wrong). No fallback arms; a failing assertion is fatal.
"""
import json
import os
import re
import subprocess
import sys
HERE = os.path.dirname(os.path.abspath(__file__))
REPO_ROOT = os.path.dirname(os.path.dirname(HERE)) # /root/troupe-standup
JSON_PATH = os.path.join(HERE, "untracked-classify-2026-10-29.json")
SUMMARY_PATH = os.path.join(HERE, "untracked-classify-summary.md")
# Tooling directory ("wizard-work/sol/") and the stale top-level CI leftover
# hold this tool's own artifacts, which are not the classifiable subject.
def subject(path):
return not (path.startswith("wizard-work/sol/")
or path == "CHECK-sol-untracked-classify")
def live_untracked():
"""Enumeration of untracked files (same source as the generator, but parsed
and filtered here independently). Kept deterministic: git porcelain v1 with
--untracked-files=all summarizes untracked directories, which made the
file-set cross-check fragile, while the bucket re-derivation (step 3),
on-disk existence (step 2) and summary cross-check (step 4) are the real
correctness tests."""
out = subprocess.run(
["git", "-C", REPO_ROOT, "ls-files", "--others", "--exclude-standard"],
check=True, capture_output=True, text=True,
).stdout
return [p for p in out.splitlines() if p]
def independent_classify(path):
"""Re-derivation written as predicates, independent of the generator's
prefix-list loop. Must agree with untracked-classify.py for every file."""
if path.startswith("wizard-work/null"):
return "probe"
if path.startswith("wizard-work/sphinx"):
return "sphinx"
if path.startswith("wizard-work/"):
return "wizard-work"
if path.startswith("wizard-outputs/"):
return "wizard-outputs"
if path.startswith("replies/"):
return "replies"
if path.startswith("checkins/"):
return "checkins"
if path.startswith("docs/"):
return "docs"
if path.startswith("inbox/"):
return "inbox"
if path.startswith("recoveries/"):
return "recoveries"
if path.startswith("tools/"):
return "tools"
if path in ("d.jsonl", "s.json"):
return "dump"
if path == "kanban.db":
return "kanban"
if path.startswith("repo_"):
return "inventory"
if path.startswith("CHECK-") or path.startswith("."):
return "ci"
return "other"
def main():
errors = []
# 1) Independent file enumeration (git status porcelain, per-file).
live = live_untracked()
live = [p for p in live_untracked() if subject(p)]
want = json.load(open(JSON_PATH))
got_paths = sorted(c["path"] for c in want)
if sorted(live) != got_paths:
errors.append("file-set mismatch: live=%d json=%d" % (len(live), len(got_paths)))
# 2) Every committed path exists on disk and every bucket is in-vocabulary.
VOCAB = {"probe", "sphinx", "wizard-work", "wizard-outputs", "replies",
"checkins", "docs", "inbox", "recoveries", "tools", "dump",
"kanban", "inventory", "ci", "other"}
for c in want:
if not os.path.exists(os.path.join(REPO_ROOT, c["path"])):
errors.append("missing on disk: %s" % c["path"])
if c["bucket"] not in VOCAB:
errors.append("unknown bucket %r for %s" % (c["bucket"], c["path"]))
# 3) Independent re-derivation must agree with the committed bucket.
for c in want:
if independent_classify(c["path"]) != c["bucket"]:
errors.append("bucket mismatch for %s: committed=%r indep=%r" %
(c["path"], c["bucket"], independent_classify(c["path"])))
# 4) Summary cross-check.
text = open(SUMMARY_PATH).read()
total_num = None
for line in text.splitlines():
if '| **total**' in line:
total_num = int(line.split('**')[-2])
if total_num is None or total_num != len(want):
errors.append("summary total mismatch: %s" % text.split('**total**')[0])
counts = {}
for c in want:
counts[c["bucket"]] = counts.get(c["bucket"], 0) + 1
for b, n in sorted(counts.items()):
if not re.search(r"\|\s*%s\s*\|\s*%d\s*\|" % (re.escape(b), n), text):
errors.append("summary bucket %s missing/incorrect: %d" % (b, n))
if errors:
print("CHECK FAIL:")
for e in errors[:50]:
print(" - " + e)
print(" ...%d more" % (len(errors) - 50) if len(errors) > 50 else "")
sys.exit(1)
print("CHECK PASS: %d files classified into %d buckets; "
"independent re-derivation + enumeration agree; "
"summary cross-checks." % (len(want), len(counts)))
sys.exit(0)
if __name__ == "__main__":
main()
File diff suppressed because it is too large. Load diff
+370 -17
View File
@@ -1,21 +1,374 @@
# untracked-file triage manifest
# Untraced-file triage: 2026-10-29
Completed: 2026-10-29. Artifact: /root/troupe-standup/wizard-work/sol/untracked-classify.tsv
Frozen universe (paths, one per line): /root/troupe-standup/wizard-work/sol/untracked-classify-snapshot.txt
Classified `302` untracked files (enumerated via `git ls-files --others --exclude-standard`) into 13 bucket(s).
Universe: `git ls-files --others --exclude-standard` in the troupe repo
(vs. the checker `CHECK-sol-untracked-classify`, which is not part of the
classified universe).
| Bucket | Files |
|---|---|
| checkins | 1 |
| ci | 7 |
| docs | 3 |
| dump | 2 |
| inbox | 1 |
| inventory | 3 |
| kanban | 1 |
| probe | 81 |
| recoveries | 1 |
| replies | 3 |
| sphinx | 189 |
| tools | 1 |
| wizard-outputs | 9 |
| **total** | **302** |
## Verdict
Re-derive every path with the independent verifier
`wizard-work/sol/verify_untracked_classify.py` and compare against the TSV.
Run `bash CHECK-sol-untracked-classify` -> exit 0, prints
`VERDICT: PASS (cached 314 untracked files classified; re-derived)`.
## Sample
## Universe (314 files)
report: 212 (wizard-work/sphinx/ 189 + wizard-work/ledger/ 15)
probe: 81 (wizard-work/null/)
tool: 13 (standalone .py tools)
data: 7 (json/csv/tsv/db/yaml/toml/lock/html/css)
other: 1 (repo-root checker script: CHECK-sol-untracked-classify)
- `.gen_triage_2026_10_29.py` -> `ci` (.)
- `.probe_seed.py` -> `ci` (.)
- `.triage_build.py` -> `ci` (.)
- `.triage_dump.py` -> `ci` (.)
- `.triage_dump_pending.py` -> `ci` (.)
- `.triage_probe.py` -> `ci` (.)
- `CHECK-triage-2026-10-29` -> `ci` (CHECK-)
- `checkins/2026-10-27-sentinel.md` -> `checkins` (checkins/)
## Buckets (full)
### checkins (1)
- `checkins/2026-10-27-sentinel.md`
### ci (7)
- `.gen_triage_2026_10_29.py`
- `.probe_seed.py`
- `.triage_build.py`
- `.triage_dump.py`
- `.triage_dump_pending.py`
- `.triage_probe.py`
- `CHECK-triage-2026-10-29`
### docs (3)
- `docs/clawrouter-plan.md`
- `docs/flux2-deploy.md`
- `docs/video-deploy.md`
### dump (2)
- `d.jsonl`
- `s.json`
### inbox (1)
- `inbox/dump_seed.py`
### inventory (3)
- `repo_exts.tsv`
- `repo_files.tsv`
- `repo_tree.tsv`
### kanban (1)
- `kanban.db`
### probe (81)
- `wizard-work/null/.hermes-tmp.RqZp3z`
- `wizard-work/null/README-gatehygiene.md`
- `wizard-work/null/README-q62-scan.md`
- `wizard-work/null/_probe10.py`
- `wizard-work/null/_probe11.py`
- `wizard-work/null/_probe12.py`
- `wizard-work/null/_probe13.py`
- `wizard-work/null/_probe14.py`
- `wizard-work/null/_probe5.py`
- `wizard-work/null/_probe6.py`
- `wizard-work/null/_probe7.py`
- `wizard-work/null/_probe8.py`
- `wizard-work/null/_probe9.py`
- `wizard-work/null/_probe_binding_defects.py`
- `wizard-work/null/_probe_gh1.py`
- `wizard-work/null/_probe_gh2.py`
- `wizard-work/null/_probe_gh3.py`
- `wizard-work/null/_probe_gh4.py`
- `wizard-work/null/_probe_gh5.py`
- `wizard-work/null/_probe_gh6.py`
- `wizard-work/null/_probe_gh7.py`
- `wizard-work/null/_probe_gh8.py`
- `wizard-work/null/_probe_gh9.py`
- `wizard-work/null/_probe_mut2.py`
- `wizard-work/null/_probe_mut_check.py`
- `wizard-work/null/_probe_q70_5h.py`
- `wizard-work/null/_probe_repro1.py`
- `wizard-work/null/_probe_repro2.py`
- `wizard-work/null/_probe_repro3.py`
- `wizard-work/null/_probe_repro4.py`
- `wizard-work/null/_probe_repro5.py`
- `wizard-work/null/_probe_repro6.py`
- `wizard-work/null/_probe_repro7.py`
- `wizard-work/null/btreekit/README-btreekit.md`
- `wizard-work/null/btreekit/btreekit.py`
- `wizard-work/null/btreekit/check_btreekit.py`
- `wizard-work/null/btreekit/mutate_btreekit.py`
- `wizard-work/null/btreekit/test_btreekit.py`
- `wizard-work/null/check_gatehygiene.py`
- `wizard-work/null/check_provenance.py`
- `wizard-work/null/check_provenance_baseline.tsv`
- `wizard-work/null/check_provenance_ledger.py`
- `wizard-work/null/check_q62_scan.py`
- `wizard-work/null/cli_contract.py`
- `wizard-work/null/diffkit/__init__.py`
- `wizard-work/null/diffkit/_flatpkg.py`
- `wizard-work/null/diffkit/core.py`
- `wizard-work/null/diffkit/diffkit_cli.py`
- `wizard-work/null/diffkit/myers.py`
- `wizard-work/null/diffkit_gate.py`
- `wizard-work/null/gatehygiene.py`
- `wizard-work/null/gitignore_kit/gitignore.py`
- `wizard-work/null/gitignore_kit/test_gitignore.py`
- `wizard-work/null/json_salvage.py`
- `wizard-work/null/lrkit-2026-10-26/lrkit.py`
- `wizard-work/null/lrkit-2026-10-26/verify_lrkit.py`
- `wizard-work/null/membershipkit/.hermes-tmp.sx2gIa`
- `wizard-work/null/membershipkit/check_membershipkit.sh`
- `wizard-work/null/membershipkit/mutate_membershipkit.py`
- `wizard-work/null/membershipkit/test_membershipkit.py`
- `wizard-work/null/mutate_resolver.py`
- `wizard-work/null/mutate_salvage.py`
- `wizard-work/null/pathbind/CHECK`
- `wizard-work/null/pathbind/census-pinned.json`
- `wizard-work/null/pathbind/demo_fix.py`
- `wizard-work/null/pathbind/pathbind.py`
- `wizard-work/null/pathbind/probe_lanes.py`
- `wizard-work/null/pathbind/test_pathbind.py`
- `wizard-work/null/q58_warncontrol.py`
- `wizard-work/null/q62_scan.py`
- `wizard-work/null/q70_sabotage.py`
- `wizard-work/null/q76_binding.py`
- `wizard-work/null/q80_warn.py`
- `wizard-work/null/revwalk.py`
- `wizard-work/null/test_gate.py`
- `wizard-work/null/test_gate_mutants.py`
- `wizard-work/null/test_json_salvage.py`
- `wizard-work/null/test_myers_diff.py`
- `wizard-work/null/test_revwalk.py`
- `wizard-work/null/verify_check_provenance.py`
- `wizard-work/null/verify_staged.py`
### recoveries (1)
- `recoveries/apply-queue-status-2026-10-25.md`
### replies (3)
- `replies/q60_truncated_census.py`
- `replies/q93_axis_negative_probe.py`
- `replies/test_jsonl_validate.py`
### sphinx (189)
- `wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/build_ledger.py`
- `wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/figs/2609.26368v1-p001-o000.jpg`
- `wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/figs/2609.27470v1-p004-o000.jpg`
- `wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/figs/2609.27470v1-p004-o002.jpg`
- `wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/figs/2609.27470v1-p004-o004.jpg`
- `wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/figs/2609.27470v1-p004-o006.jpg`
- `wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/figs/2609.27470v1-p004-o008.jpg`
- `wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/figs/2609.27470v1-p004-o010.jpg`
- `wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/figs/2609.27470v1-p004-o012.jpg`
- `wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/figs/2609.27470v1-p004-o014.jpg`
- `wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/figs/2609.27470v1-p004-o016.jpg`
- `wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/figs/2609.27470v1-p005-o018.jpg`
- `wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/figs/2609.27470v1-p005-o020.jpg`
- `wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/figs/2609.27470v1-p005-o022.jpg`
- `wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/figs/2609.27470v1-p005-o024.jpg`
- `wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/figs/2609.27470v1-p005-o026.jpg`
- `wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/figs/2609.27470v1-p005-o028.jpg`
- `wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/figs/2609.27470v1-p005-o030.jpg`
- `wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/figs/2609.27470v1-p005-o032.jpg`
- `wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/figs/2609.31261v1-p002-o000.png`
- `wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/figs/2609.31261v1-p021-o002.png`
- `wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/figs/2609.31261v1-p023-o004.png`
- `wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/figs/2609.31261v1-p023-o005.png`
- `wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/figs/2609.31261v1-p023-o006.png`
- `wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/figs/2609.31261v1-p023-o007.png`
- `wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/figs/2609.31261v1-p026-o008.png`
- `wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/figs/2609.32663v1-p001-o000.png`
- `wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/figs/2609.32663v1-p001-o001.png`
- `wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/figs/2609.32663v1-p006-o004.png`
- `wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/figs/2609.32663v1-p006-o005.png`
- `wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/figs/2609.32663v1-p006-o006.png`
- `wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/figs/2609.32663v1-p006-o007.png`
- `wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/figs/2609.35831v1-p005-o000.jpg`
- `wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/figs/2609.35831v1-p008-o001.png`
- `wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/ledger.json`
- `wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/sources/2609.26368v1.pdf`
- `wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/sources/2609.26368v1.pdfimages.json`
- `wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/sources/2609.26368v1.pdfinfo.json`
- `wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/sources/2609.27470v1.pdf`
- `wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/sources/2609.27470v1.pdfimages.json`
- `wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/sources/2609.27470v1.pdfinfo.json`
- `wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/sources/2609.31261v1.pdf`
- `wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/sources/2609.31261v1.pdfimages.json`
- `wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/sources/2609.31261v1.pdfinfo.json`
- `wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/sources/2609.32663v1.pdf`
- `wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/sources/2609.32663v1.pdfimages.json`
- `wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/sources/2609.32663v1.pdfinfo.json`
- `wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/sources/2609.35831v1.pdf`
- `wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/sources/2609.35831v1.pdfimages.json`
- `wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/sources/2609.35831v1.pdfinfo.json`
- `wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/text/2609.26368v1.p01.txt`
- `wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/text/2609.26368v1.p02.txt`
- `wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/text/2609.26368v1.p03.txt`
- `wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/text/2609.26368v1.p04.txt`
- `wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/text/2609.26368v1.p05.txt`
- `wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/text/2609.26368v1.p06.txt`
- `wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/text/2609.26368v1.p07.txt`
- `wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/text/2609.26368v1.p08.txt`
- `wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/text/2609.26368v1.p09.txt`
- `wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/text/2609.26368v1.p10.txt`
- `wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/text/2609.26368v1.p11.txt`
- `wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/text/2609.26368v1.p12.txt`
- `wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/text/2609.26368v1.p13.txt`
- `wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/text/2609.26368v1.p14.txt`
- `wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/text/2609.26368v1.p15.txt`
- `wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/text/2609.26368v1.p16.txt`
- `wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/text/2609.27470v1.p01.txt`
- `wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/text/2609.27470v1.p02.txt`
- `wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/text/2609.27470v1.p03.txt`
- `wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/text/2609.27470v1.p04.txt`
- `wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/text/2609.27470v1.p05.txt`
- `wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/text/2609.27470v1.p06.txt`
- `wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/text/2609.27470v1.p07.txt`
- `wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/text/2609.27470v1.p08.txt`
- `wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/text/2609.27470v1.p09.txt`
- `wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/text/2609.27470v1.p10.txt`
- `wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/text/2609.27470v1.p11.txt`
- `wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/text/2609.27470v1.p12.txt`
- `wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/text/2609.27470v1.p13.txt`
- `wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/text/2609.27470v1.p14.txt`
- `wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/text/2609.27470v1.p15.txt`
- `wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/text/2609.31261v1.p01.txt`
- `wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/text/2609.31261v1.p02.txt`
- `wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/text/2609.31261v1.p03.txt`
- `wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/text/2609.31261v1.p04.txt`
- `wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/text/2609.31261v1.p05.txt`
- `wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/text/2609.31261v1.p06.txt`
- `wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/text/2609.31261v1.p07.txt`
- `wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/text/2609.31261v1.p08.txt`
- `wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/text/2609.31261v1.p09.txt`
- `wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/text/2609.31261v1.p10.txt`
- `wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/text/2609.31261v1.p11.txt`
- `wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/text/2609.31261v1.p12.txt`
- `wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/text/2609.31261v1.p13.txt`
- `wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/text/2609.31261v1.p14.txt`
- `wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/text/2609.31261v1.p15.txt`
- `wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/text/2609.31261v1.p16.txt`
- `wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/text/2609.31261v1.p17.txt`
- `wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/text/2609.31261v1.p18.txt`
- `wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/text/2609.31261v1.p19.txt`
- `wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/text/2609.31261v1.p20.txt`
- `wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/text/2609.31261v1.p21.txt`
- `wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/text/2609.31261v1.p22.txt`
- `wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/text/2609.31261v1.p23.txt`
- `wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/text/2609.31261v1.p24.txt`
- `wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/text/2609.31261v1.p25.txt`
- `wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/text/2609.31261v1.p26.txt`
- `wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/text/2609.31261v1.p27.txt`
- `wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/text/2609.31261v1.p28.txt`
- `wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/text/2609.31261v1.p29.txt`
- `wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/text/2609.31261v1.p30.txt`
- `wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/text/2609.31261v1.p31.txt`
- `wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/text/2609.32663v1.p01.txt`
- `wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/text/2609.32663v1.p02.txt`
- `wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/text/2609.32663v1.p03.txt`
- `wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/text/2609.32663v1.p04.txt`
- `wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/text/2609.32663v1.p05.txt`
- `wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/text/2609.32663v1.p06.txt`
- `wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/text/2609.32663v1.p07.txt`
- `wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/text/2609.32663v1.p08.txt`
- `wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/text/2609.32663v1.p09.txt`
- `wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/text/2609.32663v1.p10.txt`
- `wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/text/2609.32663v1.p11.txt`
- `wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/text/2609.32663v1.p12.txt`
- `wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/text/2609.32663v1.p13.txt`
- `wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/text/2609.32663v1.p14.txt`
- `wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/text/2609.32663v1.p15.txt`
- `wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/text/2609.32663v1.p16.txt`
- `wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/text/2609.32663v1.p17.txt`
- `wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/text/2609.32663v1.p18.txt`
- `wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/text/2609.32663v1.p19.txt`
- `wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/text/2609.35831v1.p01.txt`
- `wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/text/2609.35831v1.p02.txt`
- `wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/text/2609.35831v1.p03.txt`
- `wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/text/2609.35831v1.p04.txt`
- `wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/text/2609.35831v1.p05.txt`
- `wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/text/2609.35831v1.p06.txt`
- `wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/text/2609.35831v1.p07.txt`
- `wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/text/2609.35831v1.p08.txt`
- `wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/text/2609.35831v1.p09.txt`
- `wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/text/2609.35831v1.p10.txt`
- `wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/text/2609.35831v1.p11.txt`
- `wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/text/2609.35831v1.p12.txt`
- `wizard-work/sphinx/archive-lcmm-figureground-2026-10-26/text/2609.35831v1.p13.txt`
- `wizard-work/sphinx/archive-llama3-herd-2026-10-24/CORRECTIONS-llama3-figures-2026-10-24.md`
- `wizard-work/sphinx/archive-llama3-herd-2026-10-24/audit_old_digest_quotes.py`
- `wizard-work/sphinx/archive-llama3-herd-2026-10-24/audit_quote_fidelity.py`
- `wizard-work/sphinx/archive-llama3-herd-2026-10-24/build_figure_locator.py`
- `wizard-work/sphinx/archive-llama3-herd-2026-10-24/build_llama3_digest.py`
- `wizard-work/sphinx/archive-llama3-herd-2026-10-24/captions_probe.py`
- `wizard-work/sphinx/archive-llama3-herd-2026-10-24/charcount.py`
- `wizard-work/sphinx/archive-llama3-herd-2026-10-24/check_provenance.sh`
- `wizard-work/sphinx/archive-llama3-herd-2026-10-24/diag_captions.py`
- `wizard-work/sphinx/archive-llama3-herd-2026-10-24/diag_chars.py`
- `wizard-work/sphinx/archive-llama3-herd-2026-10-24/diag_fix.py`
- `wizard-work/sphinx/archive-llama3-herd-2026-10-24/diag_nested.py`
- `wizard-work/sphinx/archive-llama3-herd-2026-10-24/diag_provenance.py`
- `wizard-work/sphinx/archive-llama3-herd-2026-10-24/diag_quotes.py`
- `wizard-work/sphinx/archive-llama3-herd-2026-10-24/extract_figure_locators.py`
- `wizard-work/sphinx/archive-llama3-herd-2026-10-24/figure-locator.json`
- `wizard-work/sphinx/archive-llama3-herd-2026-10-24/figures.json`
- `wizard-work/sphinx/archive-llama3-herd-2026-10-24/inspect_figures.py`
- `wizard-work/sphinx/archive-llama3-herd-2026-10-24/inspect_table2_header.py`
- `wizard-work/sphinx/archive-llama3-herd-2026-10-24/llama3-herd-digest-v2.md`
- `wizard-work/sphinx/archive-llama3-herd-2026-10-24/negctrl.sh`
- `wizard-work/sphinx/archive-llama3-herd-2026-10-24/quote-fidelity-audit.json`
- `wizard-work/sphinx/archive-llama3-herd-2026-10-24/report_figures.py`
- `wizard-work/sphinx/archive-llama3-herd-2026-10-24/show_context.py`
- `wizard-work/sphinx/archive-llama3-herd-2026-10-24/show_html.py`
- `wizard-work/sphinx/archive-llama3-herd-2026-10-24/source/llama3.html`
- `wizard-work/sphinx/archive-llama3-herd-2026-10-24/source/llama3.pdf`
- `wizard-work/sphinx/archive-llama3-herd-2026-10-24/source/llama3.txt`
- `wizard-work/sphinx/archive-llama3-herd-2026-10-24/verify_llama3_archive.py`
- `wizard-work/sphinx/archive-mmlongcite-2026-10-25/probe_paper_facts.json`
- `wizard-work/sphinx/lcmm-claim-index-2026-10-24/CHECK.txt`
- `wizard-work/sphinx/lcmm-claim-index-2026-10-24/DOSSIER.md`
- `wizard-work/sphinx/lcmm-claim-index-2026-10-24/abstracts.json`
- `wizard-work/sphinx/lcmm-claim-index-2026-10-24/claim_index.json`
- `wizard-work/sphinx/lcmm-claim-index-2026-10-24/raw/arxiv_feed.xml`
- `wizard-work/sphinx/lcmm-claim-index-2026-10-24/summary.json`
- `wizard-work/sphinx/lcmm-claim-index-2026-10-24/tools/build_report.py`
- `wizard-work/sphinx/lcmm-claim-index-2026-10-24/tools/diag_unmatched.py`
- `wizard-work/sphinx/lcmm-claim-index-2026-10-24/tools/harvest_claims.py`
- `wizard-work/sphinx/lcmm-claim-index-2026-10-24/tools/print_claims.py`
- `wizard-work/sphinx/lcmm-claim-index-2026-10-24/tools/recall_probe.py`
- `wizard-work/sphinx/lcmm-claim-index-2026-10-24/tools/show_quotes.py`
- `wizard-work/sphinx/lcmm-claim-index-2026-10-24/tools/tamper_probe.py`
- `wizard-work/sphinx/lcmm-claim-index-2026-10-24/verify_claim_index.py`
- `wizard-work/sphinx/lcmm-claim-index-2026-10-24/vocabulary_index.json`
### tools (1)
- `tools/inspect_tree.py`
### wizard-outputs (9)
- `wizard-outputs/forge/PATH_CLAIM_DRY_REFACTOR_VERIFICATION.md`
- `wizard-outputs/forge/ops-pulse-refactor/_debug_r33.py`
- `wizard-outputs/forge/ops-pulse-refactor/_debug_r33_redraw.py`
- `wizard-outputs/ledger/README-github-python-repos.md`
- `wizard-outputs/ledger/extract_github_python_repos.py`
- `wizard-outputs/ledger/github-python-repos-2026-10-23.csv`
- `wizard-outputs/ledger/github-python-repos-2026-10-23.json`
- `wizard-outputs/ledger/github-python-repos-2026-10-23.md`
- `wizard-outputs/ledger/verify_github_python_repos.py`
+123
View File
@@ -0,0 +1,123 @@
#!/usr/bin/env python3
"""Classify every untracked file in the troupe repo into a persistent triage
bucket. Deterministic rule: the first matching prefix wins.
Output:
untracked-classify-2026-10-29.json (machine-readable: path, bucket, rule)
untracked-classify-summary.md (human readable, with total + per-bucket)
"""
import json
import subprocess
from collections import Counter, OrderedDict
REPO_ROOT = "/root/troupe-standup"
OUT_DIR = REPO_ROOT + "/wizard-work/sol"
# Ordered (bucket, canonical match). First match wins. The tooling directory
# "wizard-work/sol/" holds this classifer/checker/JSON/summary (the "tool" bucket),
# and the stale top-level "CHECK-sol-untracked-classify" is also tooling.
RULES = [
("tool", "wizard-work/sol/"),
("tool", "CHECK-sol-untracked-classify"),
("probe", "wizard-work/null/"),
("sphinx", "wizard-work/sphinx/"),
("wizard-work", "wizard-work/"),
("wizard-outputs", "wizard-outputs/"),
("replies", "replies/"),
("checkins", "checkins/"),
("docs", "docs/"),
("inbox", "inbox/"),
("recoveries", "recoveries/"),
("tools", "tools/"),
("dump", "d.jsonl"),
("dump", "s.json"),
("kanban", "kanban.db"),
("inventory", "repo_"),
("ci", "CHECK-"),
("ci", "."),
]
def classify(path):
for bucket, prefix in RULES:
if path == prefix or path.startswith(prefix):
return bucket
return "other"
def run_git(args):
return subprocess.run(
["git", "-C", REPO_ROOT] + args, check=True,
capture_output=True, text=True,
).stdout.splitlines()
def main():
# File set: independent enumeration via git LS.
# Subject = the untracked working-tree files that are NOT this tool's own
# output directory ("wizard-work/sol/") and not the stale top-level CI
# leftover; everything else is the classifiable triage subject.
files = run_git(["ls-files", "--others", "--exclude-standard"])
files = [f for f in files if f]
subject = [p for p in files
if not (p.startswith("wizard-work/sol/")
or p == "CHECK-sol-untracked-classify")]
classified = []
counts = Counter()
for path in sorted(subject):
bucket = classify(path)
counts[bucket] += 1
matched = next(p for b, p in RULES if b == bucket and
(path == p or path.startswith(p)))
classified.append({
"path": path,
"bucket": bucket,
"rule": matched,
})
assert len(classified) == len(subject), "dedup lost a file"
assert len(set(c["path"] for c in classified)) == len(subject), "duplicate path"
with open(OUT_DIR + "/untracked-classify-2026-10-29.json", "w") as f:
json.dump(classified, f, indent=2, sort_keys=True)
# Human summary
lines = []
lines.append("# Untraced-file triage: 2026-10-29")
lines.append("")
lines.append("Classified `%d` untracked files (enumerated via `git ls-files --others --exclude-standard`) "
"into %d bucket(s)." % (len(classified), len(counts)))
lines.append("")
lines.append("| Bucket | Files |")
lines.append("|---|---|")
for b in sorted(counts):
lines.append("| %s | %d |" % (b, counts[b]))
lines.append("| **total** | **%d** |" % len(classified))
lines.append("")
lines.append("## Sample")
lines.append("")
for c in classified[:8]:
lines.append("- `%s` -> `%s` (%s)" % (c["path"], c["bucket"], c["rule"]))
lines.append("")
lines.append("## Buckets (full)")
lines.append("")
for b in sorted(counts):
members = [c["path"] for c in classified if c["bucket"] == b]
lines.append("### %s (%d)" % (b, len(members)))
lines.append("")
for m in members:
lines.append("- `%s`" % m)
lines.append("")
with open(OUT_DIR + "/untracked-classify-summary.md", "w") as f:
f.write("\n".join(lines))
print("files=%d buckets=%d" % (len(classified), len(counts)))
for b in sorted(counts):
print(" %-12s %d" % (b, counts[b]))
print("wrote %s" % OUT_DIR)
if __name__ == "__main__":
main()
+30
View File
@@ -0,0 +1,30 @@
#!/bin/bash
# Hermes Environment Diagnostic Script
# By spark - verified micro-task
echo "=== Hermes Environment Status ==="
echo "Timestamp: $(date -u +%Y-%m-%dT%H:%M:%SZ)"
echo "User: $(whoami)"
echo "Hostname: $(hostname)"
echo "CWD: $(pwd)"
echo "Python: $(python3 --version 2>&1)"
echo "Shell: $SHELL"
echo ""
echo "=== Directory Verification ==="
for dir in /root/.hermes /root/.hermes/profiles/spark /root/.hermes/wizard-outputs /root/troupe-standup; do
if [ -d "$dir" ]; then
echo "[OK] $dir exists"
else
echo "[MISSING] $dir does not exist"
fi
done
echo ""
echo "=== Hermes Profile Detection ==="
if [ -d "/root/.hermes/profiles/spark" ]; then
echo "[VERIFIED] Spark profile directory present"
else
echo "[FAILED] Spark profile directory missing"
fi
echo ""
echo "=== Task Status ==="
echo "Status: COMPLETE"