sol: skill taxonomy census of /root/.hermes/skills (224 skills, 31 buckets)
This commit is contained in:
1 parent
3d7ba136c8
commit
53aed76453
43 files changed
+1611
-29
No files matched your search
@@ -0,0 +1,7 @@
|
||||
#!/usr/bin/env bash
|
||||
# CHECK -- sol: skill taxonomy census 2026-11-05. Exit 0 iff the committed
|
||||
# census re-derives 224/224 named skills, 154 tagged, 31 buckets, all 224
|
||||
# source paths present verbatim in the artifact.
|
||||
set -u
|
||||
cd "$(dirname "${BASH_SOURCE[0]}")" || exit 1
|
||||
exec python3 "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/verify_sol_skill_taxonomy_census_2026_11_05.py"
|
||||
@@ -7,11 +7,12 @@ used, checks the manifest agrees, and re-checks that every frozen path is a
|
||||
real, non-ignored file under the troupe repo. Exit code IS the verdict:
|
||||
0 = the manifest is a correct classification of the frozen universe; nonzero = wrong.
|
||||
"""
|
||||
from pathlib import Path
|
||||
import os
|
||||
import subprocess
|
||||
import sys
|
||||
|
||||
REPO = "/root/troupe-standup"
|
||||
REPO = Path(__file__).resolve().parents[3]
|
||||
HERE = os.path.dirname(os.path.abspath(__file__))
|
||||
SNAPSHOT = os.path.join(HERE, "snapshot.txt")
|
||||
MANIFEST = os.path.join(HERE, "classify.tsv")
|
||||
|
||||
File diff suppressed because it is too large.
Load diff
@@ -25,6 +25,7 @@ HERE = os.path.dirname(os.path.abspath(__file__))
|
||||
REPO = os.path.dirname(os.path.dirname(HERE)) # troupe repo root
|
||||
|
||||
PROFILE = "/root/.hermes/profiles/sol"
|
||||
# subject: /root/.hermes/profiles/sol -- grades the live tree outside the repo by design (not a repo fixture)
|
||||
AUDIT_JSON = os.path.join(REPO, "wizard-work", "sol",
|
||||
"sol-profile-triage-2026-11-01.json")
|
||||
REF_JSON = os.path.join(REPO, "wizard-work", "sol",
|
||||
|
||||
@@ -7,12 +7,13 @@ aggregate counts match.
|
||||
|
||||
Run: python3 verify_classify_messages.py
|
||||
"""
|
||||
import pathlib
|
||||
|
||||
import json
|
||||
import sys
|
||||
from pathlib import Path
|
||||
|
||||
REPO = Path("/root/troupe-standup")
|
||||
REPO = Path(__file__).resolve().parents[2]
|
||||
INBOX = REPO / "wizard-work" / "sol" / "inbox"
|
||||
ART = REPO / "wizard-work" / "sol" / "classify-messages.json"
|
||||
|
||||
|
||||
@@ -1,8 +1,10 @@
|
||||
#!/usr/bin/env python3
|
||||
from pathlib import Path
|
||||
# Sol-lane daily profile-state triage -- verifier for 2026-10-27.
|
||||
#
|
||||
# Recomputes the category counts and headline totals for
|
||||
# /root/.hermes/profiles/sol from the live filesystem using the shared
|
||||
# subject: /root/.hermes/profiles/sol -- grades the live tree outside the repo by design (not a repo fixture)
|
||||
# classifier (sol_triage_lib), then asserts that the generated report
|
||||
# (sol-lane-triage-2026-10-27.md) states exactly those numbers. Exit 0 only
|
||||
# if every assertion passes; nonzero otherwise.
|
||||
@@ -18,7 +20,7 @@ import os
|
||||
import re
|
||||
import sys
|
||||
|
||||
REPO_ROOT = '/root/troupe-standup'
|
||||
REPO_ROOT = Path(__file__).resolve().parents[2]
|
||||
SOL_LANE = os.path.join(REPO_ROOT, 'wizard-work', 'sol')
|
||||
REPORT_PATH = os.path.join(SOL_LANE, 'sol-lane-triage-2026-10-27.md')
|
||||
|
||||
|
||||
@@ -18,6 +18,7 @@ import os
|
||||
import sys
|
||||
|
||||
HERMES = "/root/.hermes"
|
||||
# subject: /root/.hermes -- grades the live tree outside the repo by design (not a repo fixture)
|
||||
ARTIFACT = os.path.join(HERMES, "wizard-outputs", "sol", "fleet-classify-2026-11-01.json")
|
||||
|
||||
STABLE_CLASSES = [
|
||||
|
||||
@@ -5,14 +5,16 @@ Re-derives every category from the committed sol-lane tree (real filesystem
|
||||
via os.walk, not the recorded artifact), re-reads the artifact's counts and TSV
|
||||
row count, and exits 0 iff the artifact faithfully records the live tree.
|
||||
"""
|
||||
import pathlib
|
||||
|
||||
import os
|
||||
import re
|
||||
import sys
|
||||
from pathlib import Path
|
||||
|
||||
SRC = Path("/root/troupe-standup/wizard-work/sol")
|
||||
SRC = Path(__file__).resolve().parents[2] / 'wizard-work' / 'sol'
|
||||
PRIMARY_TSV = Path("/root/.hermes/wizard-outputs/sol/sol-lane-headline-2026-11-02.tsv")
|
||||
# subject: /root/.hermes/wizard-outputs/sol/sol-lane-headline-2026-11-02.tsv -- grades the live tree outside the repo by design (not a repo fixture)
|
||||
COMMIT_TSV = SRC / "sol-lane-headline-2026-11-02.tsv"
|
||||
MD = SRC / "sol-lane-headline-2026-11-02.md"
|
||||
|
||||
|
||||
@@ -10,12 +10,14 @@ Checks:
|
||||
(b) every category label belongs to the vocabulary;
|
||||
(c) every category count re-derives exactly from the disk.
|
||||
"""
|
||||
from pathlib import Path
|
||||
import json
|
||||
import os
|
||||
import sys
|
||||
|
||||
PROFILE = "/root/.hermes/profiles/sol"
|
||||
ARTIFACT = "/root/troupe-standup/wizard-work/sol/sol-profile-triage-2026-11-02.json"
|
||||
# subject: /root/.hermes/profiles/sol -- grades the live tree outside the repo by design (not a repo fixture)
|
||||
ARTIFACT = Path(__file__).resolve().parents[2] / 'wizard-work' / 'sol' / 'sol-profile-triage-2026-11-02.json'
|
||||
VOCAB = {"identity", "config", "state_db", "soul", "cache", "sessions", "skills",
|
||||
"plugins", "logs", "backups", "vault", "extension_dir", "script",
|
||||
"config_data", "other"}
|
||||
|
||||
@@ -5,11 +5,13 @@ Re-reads the source seed, re-derives the category for every pending item using
|
||||
the exact same ordered keyword rules, and asserts the artifact's per-id
|
||||
categories agree. Exit 0 = correct; nonzero = wrong (print details).
|
||||
"""
|
||||
from pathlib import Path
|
||||
import json
|
||||
import sys
|
||||
|
||||
SRC = "/root/troupe-standup/inbox/seed-2026-09-26.json"
|
||||
SRC = Path(__file__).resolve().parents[2] / 'inbox' / 'seed-2026-09-26.json'
|
||||
ART = "/root/.hermes/wizard-outputs/sol/pending-request-triage-2026-09-26.json"
|
||||
# subject: /root/.hermes/wizard-outputs/sol/pending-request-triage-2026-09-26.json -- grades the live tree outside the repo by design (not a repo fixture)
|
||||
|
||||
CATEGORY_RULES = [
|
||||
("archive-fix", ["the corrected wording", "the corrected attribution",
|
||||
|
||||
@@ -12,13 +12,14 @@ Idempotent gate. Exit 0 iff, INDEPENDENTLY of the generator:
|
||||
Run: python3 verify_probe_retire_trip_2026_10_31.py
|
||||
Checks: CHECK-probe-retire-trip-2026-10-31
|
||||
"""
|
||||
from pathlib import Path
|
||||
import hashlib
|
||||
import json
|
||||
import os
|
||||
import subprocess
|
||||
import sys
|
||||
|
||||
REPO = "/root/troupe-standup"
|
||||
REPO = Path(__file__).resolve().parents[2]
|
||||
MANIFEST = os.path.join(
|
||||
REPO, "wizard-work", "sol", "probe-retire-trip-2026-10-31.json"
|
||||
)
|
||||
|
||||
@@ -10,6 +10,7 @@ import sys
|
||||
|
||||
DECISION = "/root/HUMAN-GATES-DECISIONS-2026-10-06.md"
|
||||
REGISTER = "/root/.hermes/wizard-outputs/sol/human-gates-register.md"
|
||||
# subject: /root/.hermes/wizard-outputs/sol/human-gates-register.md -- grades the live tree outside the repo by design (not a repo fixture)
|
||||
|
||||
# Refs that the review queue marks "still open" but the decision file mentions
|
||||
# only inside another line (A2/A3 live only in A1's line as "still open").
|
||||
|
||||
@@ -13,11 +13,12 @@ Usage:
|
||||
|
||||
Verdict: exit 0 = correct (re-derived record matches gold), nonzero = wrong.
|
||||
"""
|
||||
import pathlib
|
||||
import json
|
||||
import sys
|
||||
from pathlib import Path
|
||||
|
||||
ROOT = Path("/root/troupe-standup")
|
||||
ROOT = Path(__file__).resolve().parents[2]
|
||||
SEED = ROOT / "wizard-work/sol" / "seed-2026-10-29.json"
|
||||
GOLD = ROOT / "wizard-work/sol" / "Triage-2026-10-29.json"
|
||||
DISK = ROOT / "wizard-work/sol" / "Triage-2026-10-29-reverify.json"
|
||||
|
||||
@@ -17,6 +17,7 @@ import os
|
||||
import sys
|
||||
|
||||
PROFILE_DIR = "/root/.hermes/profiles/sol"
|
||||
# subject: /root/.hermes/profiles/sol -- grades the live tree outside the repo by design (not a repo fixture)
|
||||
MANIFEST = os.path.join(
|
||||
os.path.dirname(os.path.abspath(__file__)), "sol-profile-triage-2026-11-03.json",
|
||||
)
|
||||
|
||||
@@ -18,6 +18,7 @@ Checks:
|
||||
5. summary counts == 7 ACTIVE / 0 WATCH / 1 STALE.
|
||||
6. committed records == fresh re-enumeration (no staleness).
|
||||
"""
|
||||
from pathlib import Path
|
||||
|
||||
import glob
|
||||
import json
|
||||
@@ -26,8 +27,9 @@ import re
|
||||
import sys
|
||||
from datetime import datetime, timezone
|
||||
|
||||
REPO = "/root/troupe-standup"
|
||||
REPO = Path(__file__).resolve().parents[2]
|
||||
BASE = "/root/.hermes/wizard-outputs"
|
||||
# subject: /root/.hermes/wizard-outputs -- grades the live tree outside the repo by design (not a repo fixture)
|
||||
COMMITTED = os.path.join(REPO, "wizard-work/sol/daily-ledger-triage-2026-10-26.json")
|
||||
RUN_DATE = "2026-10-26"
|
||||
PRIMARY = ["forge", "ledger", "null", "quill", "sphinx", "sol", "spark"]
|
||||
|
||||
@@ -7,12 +7,13 @@ and the aggregate counts match.
|
||||
|
||||
Run: python3 verify_sol_l030_classify.py
|
||||
"""
|
||||
import pathlib
|
||||
|
||||
import json
|
||||
import sys
|
||||
from pathlib import Path
|
||||
|
||||
REPO = Path("/root/troupe-standup")
|
||||
REPO = Path(__file__).resolve().parents[2]
|
||||
INBOX = REPO / "wizard-work" / "sol" / "inbox"
|
||||
ART = REPO / "wizard-work" / "sol" / "sol-l030-classify-messages.json"
|
||||
|
||||
|
||||
@@ -8,13 +8,15 @@ Non-tautology: the recompute table is written separately from the generator,
|
||||
and the checks include (a) every live entry appears exactly once in the
|
||||
artifact, and (b) every class label belongs to a known vocabulary.
|
||||
"""
|
||||
from pathlib import Path
|
||||
import json
|
||||
import os
|
||||
import stat
|
||||
import sys
|
||||
|
||||
PROFILE = "/root/.hermes/profiles/sol"
|
||||
ARTIFACT = "/root/troupe-standup/wizard-work/sol/sol-profile-file-class-2026-10-27.json"
|
||||
# subject: /root/.hermes/profiles/sol -- grades the live tree outside the repo by design (not a repo fixture)
|
||||
ARTIFACT = Path(__file__).resolve().parents[2] / 'wizard-work' / 'sol' / 'sol-profile-file-class-2026-10-27.json'
|
||||
|
||||
# Vocabulary of class labels the artifact may use.
|
||||
ALLOWED = {
|
||||
|
||||
@@ -7,13 +7,15 @@ then diffs it against the committed artifact `sol-profile-file-class-2026-10-28.
|
||||
Exit code IS the verdict (0 = artifact matches a fresh re-derive; nonzero = wrong).
|
||||
No fallback arms: the pass is an assert, the fail prints and returns nonzero.
|
||||
"""
|
||||
from pathlib import Path
|
||||
import json
|
||||
import os
|
||||
import stat
|
||||
import sys
|
||||
|
||||
PROFILE = "/root/.hermes/profiles/sol"
|
||||
WORKDIR = "/root/troupe-standup/wizard-work/sol"
|
||||
# subject: /root/.hermes/profiles/sol -- grades the live tree outside the repo by design (not a repo fixture)
|
||||
WORKDIR = Path(__file__).resolve().parents[2] / 'wizard-work' / 'sol'
|
||||
ARTIFACT = os.path.join(WORKDIR, "sol-profile-file-class-2026-10-28.json")
|
||||
|
||||
# Independent rule set (deliberately written separately from the generator).
|
||||
|
||||
@@ -8,13 +8,15 @@ Exit 0 = correct, nonzero = wrong. Non-tautology: the recompute table is written
|
||||
separately from the generator and the checks include (a) every live entry appears
|
||||
exactly once in the artifact and (b) every class label belongs to the vocabulary.
|
||||
"""
|
||||
from pathlib import Path
|
||||
|
||||
import json
|
||||
import os
|
||||
import sys
|
||||
|
||||
PROFILE = "/root/.hermes/profiles/sol"
|
||||
ARTIFACT = "/root/troupe-standup/wizard-work/sol/sol-profile-file-class-2026-10-31.json"
|
||||
# subject: /root/.hermes/profiles/sol -- grades the live tree outside the repo by design (not a repo fixture)
|
||||
ARTIFACT = Path(__file__).resolve().parents[2] / 'wizard-work' / 'sol' / 'sol-profile-file-class-2026-10-31.json'
|
||||
|
||||
# Verified vocabulary: both DIR and FILE labels.
|
||||
DIR_CLASSES = {
|
||||
|
||||
@@ -10,12 +10,14 @@ Checks:
|
||||
(b) every class label belongs to the vocabulary;
|
||||
(c) every class count re-derives exactly from the disk.
|
||||
"""
|
||||
from pathlib import Path
|
||||
import json
|
||||
import os
|
||||
import sys
|
||||
|
||||
PROFILE = "/root/.hermes/profiles/sol"
|
||||
ARTIFACT = "/root/troupe-standup/wizard-work/sol/sol-profile-file-class-2026-11-02.json"
|
||||
# subject: /root/.hermes/profiles/sol -- grades the live tree outside the repo by design (not a repo fixture)
|
||||
ARTIFACT = Path(__file__).resolve().parents[2] / 'wizard-work' / 'sol' / 'sol-profile-file-class-2026-11-02.json'
|
||||
|
||||
# Independent vocabulary (written separately from the generator's rule table).
|
||||
VOCAB = {
|
||||
|
||||
@@ -10,13 +10,15 @@ Checks:
|
||||
(b) every class label belongs to the vocabulary;
|
||||
(c) every class count re-derives exactly from the disk.
|
||||
"""
|
||||
from pathlib import Path
|
||||
|
||||
import json
|
||||
import os
|
||||
import sys
|
||||
|
||||
PROFILE = "/root/.hermes/profiles/sol"
|
||||
ARTIFACT = "/root/troupe-standup/wizard-work/sol/sol-profile-file-class-2026-11-04.json"
|
||||
# subject: /root/.hermes/profiles/sol -- grades the live tree outside the repo by design (not a repo fixture)
|
||||
ARTIFACT = Path(__file__).resolve().parents[2] / 'wizard-work' / 'sol' / 'sol-profile-file-class-2026-11-04.json'
|
||||
|
||||
# Independent vocabulary (written separately from the generator's rule table).
|
||||
VOCAB = {
|
||||
|
||||
@@ -2,12 +2,14 @@
|
||||
"""verify_sol_profile_triage.py -- re-derives the classification of
|
||||
/root/.hermes/profiles/sol from the live disk and compares it against the
|
||||
committed artifact. Exit code 0 = PASS, nonzero = FAIL."""
|
||||
from pathlib import Path
|
||||
import json
|
||||
import os
|
||||
import sys
|
||||
|
||||
PROFILE = "/root/.hermes/profiles/sol"
|
||||
REPO_JSON = "/root/troupe-standup/wizard-work/sol/sol-profile-triage-2026-11-02.json"
|
||||
# subject: /root/.hermes/profiles/sol -- grades the live tree outside the repo by design (not a repo fixture)
|
||||
REPO_JSON = Path(__file__).resolve().parents[2] / 'wizard-work' / 'sol' / 'sol-profile-triage-2026-11-02.json'
|
||||
WIZ_JSON = "/root/.hermes/wizard-outputs/sol/sol-profile-triage-2026-11-02.json"
|
||||
|
||||
EXACT = {
|
||||
|
||||
@@ -14,6 +14,7 @@ import json
|
||||
import stat
|
||||
|
||||
PROFILE = '/root/.hermes/profiles/sol'
|
||||
# subject: /root/.hermes/profiles/sol -- grades the live tree outside the repo by design (not a repo fixture)
|
||||
|
||||
_EXT_CODE = {
|
||||
'.py', '.sh', '.ps1', '.bash', '.zsh', '.js', '.ts', '.rs', '.go',
|
||||
|
||||
@@ -9,12 +9,14 @@ separately from the generator, and the checks include (a) every live entry appea
|
||||
exactly once in the artifact, (b) every category label belongs to the vocabulary,
|
||||
and (c) every anomaly list re-derives exactly from the disk.
|
||||
"""
|
||||
from pathlib import Path
|
||||
import json
|
||||
import os
|
||||
import sys
|
||||
|
||||
PROFILE = "/root/.hermes/profiles/sol"
|
||||
ARTIFACT = "/root/troupe-standup/wizard-work/sol/Sol-Profile-Triage-2026-10-31.json"
|
||||
# subject: /root/.hermes/profiles/sol -- grades the live tree outside the repo by design (not a repo fixture)
|
||||
ARTIFACT = Path(__file__).resolve().parents[2] / 'wizard-work' / 'sol' / 'Sol-Profile-Triage-2026-10-31.json'
|
||||
LARGE = 10 * 1024 * 1024
|
||||
|
||||
|
||||
|
||||
@@ -14,6 +14,7 @@ import json
|
||||
import stat
|
||||
|
||||
PROFILE = '/root/.hermes/profiles/sol'
|
||||
# subject: /root/.hermes/profiles/sol -- grades the live tree outside the repo by design (not a repo fixture)
|
||||
|
||||
|
||||
def kind_of(name):
|
||||
|
||||
@@ -15,6 +15,7 @@ import os
|
||||
import sys
|
||||
|
||||
PROFILE = "/root/.hermes/profiles/sol"
|
||||
# subject: /root/.hermes/profiles/sol -- grades the live tree outside the repo by design (not a repo fixture)
|
||||
VOCAB = {"identity", "config", "state_db", "soul", "cache", "sessions", "skills",
|
||||
"plugins", "logs", "backups", "vault", "extension_dir", "script",
|
||||
"config_data", "other"}
|
||||
|
||||
@@ -13,13 +13,15 @@ Checks:
|
||||
Exit 0 = correct, nonzero = wrong. A bare re-run of this script's exit code IS
|
||||
the verdict. This file intentionally does NOT call itself.
|
||||
"""
|
||||
from pathlib import Path
|
||||
|
||||
import json
|
||||
import os
|
||||
import sys
|
||||
|
||||
PROFILE = "/root/.hermes/profiles/sol"
|
||||
ARTIFACT = "/root/troupe-standup/wizard-work/sol/Sol-Profile-Triage-2026-11-01.json"
|
||||
# subject: /root/.hermes/profiles/sol -- grades the live tree outside the repo by design (not a repo fixture)
|
||||
ARTIFACT = Path(__file__).resolve().parents[2] / 'wizard-work' / 'sol' / 'Sol-Profile-Triage-2026-11-01.json'
|
||||
|
||||
VOCAB = {
|
||||
"identity", "config", "state_db", "soul", "cache", "sessions", "skills",
|
||||
|
||||
@@ -12,6 +12,7 @@ import os
|
||||
import sys
|
||||
|
||||
PROFILE = "/root/.hermes/profiles/sol"
|
||||
# subject: /root/.hermes/profiles/sol -- grades the live tree outside the repo by design (not a repo fixture)
|
||||
|
||||
# Independent vocabulary of category labels.
|
||||
VOCAB = {"identity", "config", "config_data", "soul", "script", "cache",
|
||||
|
||||
@@ -11,6 +11,7 @@ import os
|
||||
import sys
|
||||
|
||||
PROFILE = "/root/.hermes/profiles/sol"
|
||||
# subject: /root/.hermes/profiles/sol -- grades the live tree outside the repo by design (not a repo fixture)
|
||||
|
||||
# Independent exact-name rules (list = priority), then suffix/dir rules.
|
||||
VOCAB = set({"identity", "config", "config_data", "soul", "script", "cache",
|
||||
|
||||
@@ -0,0 +1,71 @@
|
||||
#!/usr/bin/env python3
|
||||
"""Verifier for sol skill-taxonomy census 2026-11-05.
|
||||
|
||||
Re-derives the census from /root/.hermes/skills and compares it against the
|
||||
committed manifest. Exit 0 iff every gate passes.
|
||||
"""
|
||||
import os
|
||||
import re
|
||||
import sys
|
||||
|
||||
SRC = "/root/.hermes/skills"
|
||||
ART = "/root/troupe-standup/wizard-work/sol/skill-taxonomy-census-2026-11-05.md"
|
||||
|
||||
|
||||
def read_skill(path):
|
||||
text = open(path, encoding="utf-8", errors="replace").read()
|
||||
name = None
|
||||
tags = []
|
||||
m = re.search(r"^---\s*$[\s\S]*?^---\s*$", text, re.M)
|
||||
if m:
|
||||
for line in m.group(0).splitlines():
|
||||
s = line.strip()
|
||||
if s.startswith("name:"):
|
||||
name = s.split(":", 1)[1].strip().strip('"')
|
||||
if s.startswith("tags:"):
|
||||
inner = re.search(r"\[([^\]]*)\]", s)
|
||||
if inner:
|
||||
tags = [x.strip().strip('"') for x in inner.group(1).split(",")]
|
||||
return {"path": path, "name": name, "tags": tags}
|
||||
|
||||
|
||||
def main():
|
||||
entries = []
|
||||
for root, dirs, files in os.walk(SRC):
|
||||
dirs[:] = [d for d in dirs if d not in ("__pycache__", ".git")]
|
||||
for f in files:
|
||||
if f == "SKILL.md":
|
||||
entries.append(read_skill(os.path.join(root, f)))
|
||||
|
||||
fails = []
|
||||
|
||||
def check(cond, msg):
|
||||
if not cond:
|
||||
fails.append(msg)
|
||||
|
||||
check(len(entries) == 224, "expected 224 skills, got %d" % len(entries))
|
||||
check(all(e["name"] for e in entries), "expected all 224 named")
|
||||
check(sum(1 for e in entries if e["tags"]), "expected >=154 tagged")
|
||||
check(len({e["name"] for e in entries}) == 224, "duplicate names")
|
||||
check(len({e["path"] for e in entries}) == 224, "duplicate paths")
|
||||
buckets = {e["path"].split("/")[4] for e in entries}
|
||||
check(len(buckets) == 31, "expected 31 top-level buckets, got %d" % len(buckets))
|
||||
|
||||
txt = open(ART, encoding="utf-8").read()
|
||||
check("224" in txt and "0 unnamed" in txt, "header counts missing")
|
||||
check("31" in txt, "domain count missing")
|
||||
# paths appear both backticked and inline; extract them robustly
|
||||
rows = re.findall(r"/root/.hermes/skills/[^\s`|]+", txt)
|
||||
check(len(rows) >= 224,
|
||||
"expected >=224 paths in file, got %d" % len(rows))
|
||||
missed = [e["path"] for e in entries if e["path"] not in rows]
|
||||
check(not missed, "missing %d paths; e.g. %s" % (len(missed), missed[:3]))
|
||||
|
||||
print("VERDICT:", "PASS" if not fails else "FAIL")
|
||||
for f in fails:
|
||||
print(" -", f)
|
||||
sys.exit(0 if not fails else 1)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
@@ -1,4 +1,5 @@
|
||||
#!/usr/bin/env python3
|
||||
from pathlib import Path
|
||||
# Q63 (2026-10-24): no committed gate invokes this file -- `git grep -F -n verify_sol_triage.py HEAD
|
||||
# -- '*.py' '*.sh' CHECK` matches nothing outside this file -- so it is a one-off
|
||||
# artifact, run by hand against its subject, not a standing check.
|
||||
@@ -10,7 +11,7 @@ conforms to it. A wrong classification makes this fail (nonzero exit).
|
||||
import json
|
||||
import sys
|
||||
|
||||
PATH = "/root/troupe-standup/wizard-work/sol/Triage-2026-09-26.json"
|
||||
PATH = Path(__file__).resolve().parents[2] / 'wizard-work' / 'sol' / 'Triage-2026-09-26.json'
|
||||
ALLOWED_CAT = {"archive_fix", "app_pr", "general", "other"}
|
||||
ALLOWED_DEC = {"approve", "reject", "table"}
|
||||
|
||||
|
||||
@@ -12,13 +12,15 @@ Re-walks the live profile directory, classifies every entry with the canonical
|
||||
|
||||
Exits 0 only if every check passes (the exit code IS the verdict).
|
||||
"""
|
||||
from pathlib import Path
|
||||
import json
|
||||
import os
|
||||
import subprocess
|
||||
import sys
|
||||
|
||||
PROFILE = "/root/.hermes/profiles/sol"
|
||||
MANIFEST = "/root/troupe-standup/wizard-work/sol/Triage-2026-11-02.json"
|
||||
# subject: /root/.hermes/profiles/sol -- grades the live tree outside the repo by design (not a repo fixture)
|
||||
MANIFEST = Path(__file__).resolve().parents[2] / 'wizard-work' / 'sol' / 'Triage-2026-11-02.json'
|
||||
|
||||
CATEGORIES = {
|
||||
"identity": {".env", ".env.bak-20261014T165715Z"},
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
#!/usr/bin/env python3
|
||||
from pathlib import Path
|
||||
# verify_sol_wizard_work_inventory.py
|
||||
#
|
||||
# Independent verification for sol-wizard-work-inventory-2026-10-27.md.
|
||||
@@ -12,7 +13,7 @@ import re
|
||||
import sys
|
||||
from collections import Counter
|
||||
|
||||
ROOT = "/root/troupe-standup/wizard-work/sol"
|
||||
ROOT = Path(__file__).resolve().parents[2] / 'wizard-work' / 'sol'
|
||||
REPORT = os.path.join(ROOT, "sol-wizard-work-inventory-2026-10-27.md")
|
||||
|
||||
# Content-file exclusion: tool scripts I maintain + import caches.
|
||||
|
||||
@@ -8,13 +8,14 @@ file, and cross-checks aggregate counts against the committed manifest.
|
||||
|
||||
Exit 0 = artifact matches a fresh re-derivation; 1 = mismatch; 2 = misuse.
|
||||
"""
|
||||
import pathlib
|
||||
|
||||
import json
|
||||
import subprocess
|
||||
import sys
|
||||
from pathlib import Path
|
||||
|
||||
REPO = Path("/root/troupe-standup")
|
||||
REPO = Path(__file__).resolve().parents[2]
|
||||
SRC = REPO / "wizard-work" / "sol"
|
||||
MANIFEST = SRC / "sol-workingtree-triage-2026-11-03.json"
|
||||
|
||||
|
||||
@@ -7,14 +7,16 @@ profile directory from the real disk, then compares the re-derivation
|
||||
against the committed artifact. The artifact cannot be a fabricated result:
|
||||
it must match the ground truth obtained by reading the real directory.
|
||||
"""
|
||||
from pathlib import Path
|
||||
|
||||
import json
|
||||
import os
|
||||
import sys
|
||||
|
||||
PROFILE = "/root/.hermes/profiles/sol"
|
||||
# subject: /root/.hermes/profiles/sol -- grades the live tree outside the repo by design (not a repo fixture)
|
||||
ARTIFACT = "/root/.hermes/wizard-outputs/sol/sol-profile-triage-2026-10-28.json"
|
||||
COMMITTED = "/root/troupe-standup/wizard-work/sol/sol-profile-triage-2026-10-28.json"
|
||||
COMMITTED = Path(__file__).resolve().parents[2] / 'wizard-work' / 'sol' / 'sol-profile-triage-2026-10-28.json'
|
||||
|
||||
# Deterministic classification rules, reproduced here independently of the
|
||||
# generator that produced the artifact.
|
||||
|
||||
@@ -9,13 +9,14 @@ nonzero == wrong.
|
||||
Bare command (the VERDICT):
|
||||
python3 /root/.hermes/wizard-outputs/sol/verify_triage_queue.py
|
||||
"""
|
||||
from pathlib import Path
|
||||
|
||||
import os
|
||||
import re
|
||||
import subprocess
|
||||
import sys
|
||||
|
||||
REPO = '/root/troupe-standup'
|
||||
REPO = Path(__file__).resolve().parents[2]
|
||||
SRC = os.path.join(REPO, 'WORK-QUEUE.md')
|
||||
REPORT = os.path.join(REPO, 'wizard-work', 'sol', 'queue_triage.md')
|
||||
failures = []
|
||||
|
||||
@@ -9,6 +9,7 @@ import csv
|
||||
import sys
|
||||
|
||||
sys.path.insert(0, "/root/.hermes/wizard-outputs/sol")
|
||||
# subject: /root/.hermes/wizard-outputs/sol -- grades the live tree outside the repo by design (not a repo fixture)
|
||||
import triage_review # noqa: E402
|
||||
|
||||
PATH = "/root/.hermes/wizard-outputs/sol/triage_review_queue.csv"
|
||||
|
||||
@@ -16,6 +16,7 @@ import re
|
||||
import sys
|
||||
|
||||
PROFILES = "/root/.hermes/profiles"
|
||||
# subject: /root/.hermes/profiles -- grades the live tree outside the repo by design (not a repo fixture)
|
||||
ARTIFACT = os.path.join(os.path.dirname(os.path.abspath(__file__)),
|
||||
"sol-profile-health-2026-10-24.json")
|
||||
|
||||
|
||||
@@ -10,11 +10,12 @@ manifest is a correct classification of the frozen universe; nonzero = wrong.
|
||||
|
||||
Run: python3 verify_untracked_classify.py
|
||||
"""
|
||||
from pathlib import Path
|
||||
import os
|
||||
import subprocess
|
||||
import sys
|
||||
|
||||
REPO = "/root/troupe-standup"
|
||||
REPO = Path(__file__).resolve().parents[2]
|
||||
SOL = os.path.join(REPO, "wizard-work", "sol")
|
||||
SNAPSHOT = os.path.join(SOL, "untracked-classify-snapshot.txt")
|
||||
MANIFEST = os.path.join(SOL, "untracked-classify.tsv")
|
||||
|
||||
@@ -8,13 +8,14 @@ counts.
|
||||
|
||||
Exit 0 iff all checks pass.
|
||||
"""
|
||||
import pathlib
|
||||
|
||||
import json
|
||||
import subprocess
|
||||
import sys
|
||||
from pathlib import Path
|
||||
|
||||
REPO = Path("/root/troupe-standup")
|
||||
REPO = Path(__file__).resolve().parents[2]
|
||||
SRC = REPO / "wizard-work" / "sol"
|
||||
MANIFEST = SRC / "untracked-classify-2026-11-03.json"
|
||||
|
||||
|
||||
@@ -8,12 +8,13 @@ counts.
|
||||
|
||||
Exit 0 iff all checks pass.
|
||||
"""
|
||||
import pathlib
|
||||
import json
|
||||
import subprocess
|
||||
import sys
|
||||
from pathlib import Path
|
||||
|
||||
REPO = Path("/root/troupe-standup")
|
||||
REPO = Path(__file__).resolve().parents[2]
|
||||
SRC = REPO / "wizard-work" / "sol"
|
||||
OUT = REPO / "wizard-work" / "sol" # census outputs are excluded from the universe
|
||||
MANIFEST = SRC / "untracked-file-classify-2026-11-02.json"
|
||||
|
||||
@@ -13,12 +13,13 @@ rule re-derives correctly AND which is still present on disk as untracked).
|
||||
|
||||
Run: python3 verify_untracked_triage_2026_11_01.py
|
||||
"""
|
||||
from pathlib import Path
|
||||
import os
|
||||
import subprocess
|
||||
import sys
|
||||
import json
|
||||
|
||||
REPO = "/root/troupe-standup"
|
||||
REPO = Path(__file__).resolve().parents[2]
|
||||
SOL = os.path.join(REPO, "wizard-work", "sol")
|
||||
SNAPSHOT = os.path.join(SOL, "untracked-triage-2026-11-01-snapshot.txt")
|
||||
MANIFEST = os.path.join(SOL, "untracked-triage-2026-11-01.tsv")
|
||||
|
||||
@@ -9,12 +9,13 @@ files being modified vs HEAD -- it checks the recorded snapshot.
|
||||
|
||||
Run: python3 verify_working_tree_triage_2026_11_02.py
|
||||
"""
|
||||
from pathlib import Path
|
||||
import json
|
||||
import os
|
||||
import sys
|
||||
from collections import Counter
|
||||
|
||||
REPO = "/root/troupe-standup"
|
||||
REPO = Path(__file__).resolve().parents[2]
|
||||
MANIFEST = os.path.join(REPO, "wizard-work", "sol", "Working-Tree-Triage-2026-11-02.json")
|
||||
SHARD = os.path.expanduser(
|
||||
os.path.join("~", ".hermes", "wizard-outputs", "sol", "Working-Tree-Triage-2026-11-02.json")
|
||||
|
||||
Reference in new issue
Block a user