spark: add verified hermes environment diagnostic script
This commit is contained in:
1 parent
89fbbf7400
commit
1d06abf270
5 files changed
+2164
-17
No files matched your search
@@ -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
@@ -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`
|
||||
@@ -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()
|
||||
Executable
+30
@@ -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"
|
||||
Reference in new issue
Block a user