sol: sol-profile top-level triage 2026-11-02
This commit is contained in:
1 parent
6a5d938976
commit
ae1897a344
4 files changed
+429
-40
No files matched your search
+93
@@ -0,0 +1,93 @@
|
||||
#!/usr/bin/env bash
|
||||
# CHECK -- sol: sol-profile-triage-2026-11-02 re-derives the classification
|
||||
# from the live profile dir and verifies the committed JSON against it on disk.
|
||||
# Exit 0 iff the re-derived categories match BOTH committed artifacts.
|
||||
set -u
|
||||
|
||||
python3 - <<'PY'
|
||||
import datetime, json, os, sys
|
||||
|
||||
PROFILE = "/root/.hermes/profiles/sol"
|
||||
EXACT = {
|
||||
"identity": {".env", ".env.bak-20261014T165715Z"},
|
||||
"soul": {"SOUL.md"},
|
||||
"config": {".env.lock", "config.yaml", "config.yaml.bak-20261014T165715Z"},
|
||||
"state_db": {
|
||||
"state.db", "state.db-shm", "state.db-wal", "state.db.auto-maintenance.lock",
|
||||
"state.db.fts_rebuild.lock", "state.db.quarantine.lock", "auth.json",
|
||||
"auth.lock", ".skills_prompt_snapshot.json", "models_dev_cache.json",
|
||||
"models_dev_cache.etag",
|
||||
},
|
||||
"cache": {"cache", "audio_cache", "image_cache"},
|
||||
"sessions": {"sessions"},
|
||||
"skills": {"skills"},
|
||||
"plugins": {"plugins", "plugin-update-checks"},
|
||||
"logs": {"logs"},
|
||||
"backups": {"backups"},
|
||||
"vault": {"vault"},
|
||||
}
|
||||
|
||||
def classify(name, is_dir):
|
||||
for cat, names in EXACT.items():
|
||||
if name in names:
|
||||
return cat
|
||||
if is_dir:
|
||||
return "extension_dir"
|
||||
if name.endswith(".py"):
|
||||
return "script"
|
||||
if name.endswith((".yaml", ".json")):
|
||||
return "config_data"
|
||||
return "other"
|
||||
|
||||
def load(p):
|
||||
with open(p, encoding="utf-8") as fh:
|
||||
return json.load(fh)
|
||||
|
||||
def rederived():
|
||||
exp = {}
|
||||
for name in os.listdir(PROFILE):
|
||||
cat = classify(name, os.path.isdir(os.path.join(PROFILE, name)))
|
||||
exp[cat] = exp.get(cat, 0) + 1
|
||||
return exp
|
||||
|
||||
fails = []
|
||||
wiz_json = "/root/.hermes/wizard-outputs/sol/sol-profile-triage-2026-11-02.json"
|
||||
repo_json = "/root/troupe-standup/wizard-work/sol/sol-profile-triage-2026-11-02.json"
|
||||
if not os.path.isfile(wiz_json):
|
||||
fails.append("missing wizard-outputs artifact: " + wiz_json)
|
||||
if not os.path.isfile(repo_json):
|
||||
fails.append("missing repo artifact: " + repo_json)
|
||||
if fails:
|
||||
print("FAIL"); [print(" -", f) for f in fails]; sys.exit(1)
|
||||
if not os.path.isfile(wiz_json):
|
||||
fails.append("missing committed wizard-outputs copy: " + wiz_json)
|
||||
if not os.path.isfile(repo_json):
|
||||
fails.append("missing committed repo copy: " + repo_json)
|
||||
if fails:
|
||||
print("FAIL"); [print(" -", f) for f in fails]; sys.exit(1)
|
||||
|
||||
disk = rederived()
|
||||
for label, jpath in (("wizard-outputs", wiz_json), ("repo", repo_json)):
|
||||
d = load(jpath)
|
||||
if d.get("total_entries") != len(os.listdir(PROFILE)):
|
||||
fails.append("[" + label + "] total_entries mismatch")
|
||||
if d.get("categories") != disk:
|
||||
fails.append("[" + label + "] categories mismatch (got %s, want %s)"
|
||||
% (json.dumps(d.get("categories"), sort_keys=True),
|
||||
json.dumps(disk, sort_keys=True)))
|
||||
for e in d.get("entries", []):
|
||||
if e.get("category") != classify(e["name"], e.get("type") == "dir"):
|
||||
fails.append("[" + label + "] entry category mismatch: " + str(e.get("name")))
|
||||
elif not os.path.lexists(e.get("path", "")):
|
||||
fails.append("[" + label + "] referenced path no longer exists: " + str(e.get("path")))
|
||||
|
||||
print("PASS" if not fails else "FAIL")
|
||||
for f in fails:
|
||||
print(" -", f)
|
||||
sys.exit(1 if fails else 0)
|
||||
PY
|
||||
EXIT=$?
|
||||
if [ $EXIT -ne 0 ]; then
|
||||
echo "CHECK FAILED (exit $EXIT)"
|
||||
fi
|
||||
exit $EXIT
|
||||
@@ -0,0 +1,237 @@
|
||||
#!/usr/bin/env python3
|
||||
"""Generate a sol-profile top-level triage artifact for /root/.hermes/profiles/sol.
|
||||
|
||||
Classifies every entry by deterministic rules, then writes a JSON artifact plus a
|
||||
human-readable MD report and a re-deriving CHECK script, under both
|
||||
/root/.hermes/wizard-outputs/sol/ and /root/troupe-standup/wizard-work/sol/.
|
||||
"""
|
||||
|
||||
import datetime
|
||||
import json
|
||||
import os
|
||||
import shutil
|
||||
|
||||
PROFILE = "/root/.hermes/profiles/sol"
|
||||
WIZ = "/root/.hermes/wizard-outputs/sol"
|
||||
REPO = "/root/troupe-standup/wizard-work/sol"
|
||||
|
||||
EXACT = {
|
||||
"identity": {".env", ".env.bak-20261014T165715Z"},
|
||||
"soul": {"SOUL.md"},
|
||||
"config": {".env.lock", "config.yaml", "config.yaml.bak-20261014T165715Z"},
|
||||
"state_db": {
|
||||
"state.db", "state.db-shm", "state.db-wal", "state.db.auto-maintenance.lock",
|
||||
"state.db.fts_rebuild.lock", "state.db.quarantine.lock", "auth.json",
|
||||
"auth.lock", ".skills_prompt_snapshot.json", "models_dev_cache.json",
|
||||
"models_dev_cache.etag",
|
||||
},
|
||||
"cache": {"cache", "audio_cache", "image_cache"},
|
||||
"sessions": {"sessions"},
|
||||
"skills": {"skills"},
|
||||
"plugins": {"plugins", "plugin-update-checks"},
|
||||
"logs": {"logs"},
|
||||
"backups": {"backups"},
|
||||
"vault": {"vault"},
|
||||
}
|
||||
|
||||
|
||||
def classify(name, is_dir):
|
||||
for cat, names in EXACT.items():
|
||||
if name in names:
|
||||
return cat
|
||||
if is_dir:
|
||||
return "extension_dir"
|
||||
if name.endswith(".py"):
|
||||
return "script"
|
||||
if name.endswith((".yaml", ".json")):
|
||||
return "config_data"
|
||||
return "other"
|
||||
|
||||
|
||||
def main():
|
||||
names = sorted(os.listdir(PROFILE))
|
||||
entries = []
|
||||
for name in names:
|
||||
p = os.path.join(PROFILE, name)
|
||||
entries.append({
|
||||
"name": name,
|
||||
"path": p,
|
||||
"type": "dir" if os.path.isdir(p) else "file",
|
||||
"category": classify(name, os.path.isdir(p)),
|
||||
})
|
||||
|
||||
counts = {}
|
||||
for e in entries:
|
||||
counts[e["category"]] = counts.get(e["category"], 0) + 1
|
||||
|
||||
generated = datetime.datetime.now(datetime.timezone.utc).strftime("%Y-%m-%dT%H:%M:%SZ")
|
||||
artifact = {
|
||||
"generated_utc": generated,
|
||||
"profile": PROFILE,
|
||||
"type": "sol-profile-triage",
|
||||
"generated_for": "2026-11-02",
|
||||
"total_entries": len(entries),
|
||||
"categories": counts,
|
||||
"entries": entries,
|
||||
"rules": {
|
||||
"identity": "exact name in identity set",
|
||||
"soul": "exact name SOUL.md",
|
||||
"config": "exact name in config set",
|
||||
"state_db": "exact name in state_db set",
|
||||
"cache": "exact name in cache set",
|
||||
"sessions": "exact name in sessions set",
|
||||
"skills": "exact name in skills set",
|
||||
"plugins": "exact name in plugins set",
|
||||
"logs": "exact name in logs set",
|
||||
"backups": "exact name in backups set",
|
||||
"vault": "exact name in vault set",
|
||||
"extension_dir": "any directory",
|
||||
"script": "name ends with .py",
|
||||
"config_data": "name ends with .yaml or .json",
|
||||
"other": "none of the above",
|
||||
},
|
||||
}
|
||||
|
||||
json_path = os.path.join(WIZ, "sol-profile-triage-2026-11-02.json")
|
||||
os.makedirs(WIZ, exist_ok=True)
|
||||
with open(json_path, "w", encoding="utf-8") as fh:
|
||||
json.dump(artifact, fh, indent=2)
|
||||
fh.write("\n")
|
||||
|
||||
md_lines = [
|
||||
"# Sol profile triage - 2026-11-02",
|
||||
"",
|
||||
"Re-derived from the live profile dir " + PROFILE + ".",
|
||||
"Generated (UTC): " + generated,
|
||||
"Total entries on disk: " + str(artifact["total_entries"]),
|
||||
"Category counts: " + json.dumps(counts, sort_keys=True),
|
||||
"",
|
||||
"## Entries",
|
||||
"",
|
||||
]
|
||||
for e in entries:
|
||||
md_lines.append("- **%s** (%s) -> %s" % (e["name"], e["type"], e["category"]))
|
||||
md_lines.append("")
|
||||
md_path = os.path.join(WIZ, "sol-profile-triage-2026-11-02.md")
|
||||
with open(md_path, "w", encoding="utf-8") as fh:
|
||||
fh.write("\n".join(md_lines))
|
||||
|
||||
# Reflect artifact into the repo.
|
||||
for src, tag in ((json_path, "json"), (md_path, "md")):
|
||||
dst = os.path.join(REPO, os.path.basename(src))
|
||||
shutil.copyfile(src, dst)
|
||||
|
||||
# CHECK script (re-derives classification from the live profile).
|
||||
check_content = r'''#!/usr/bin/env bash
|
||||
# CHECK -- sol: sol-profile-triage-2026-11-02 re-derives the classification
|
||||
# from the live profile dir and verifies the committed JSON against it on disk.
|
||||
# Exit 0 iff the re-derived categories match BOTH committed artifacts.
|
||||
set -u
|
||||
|
||||
python3 - <<'PY'
|
||||
import datetime, json, os, sys
|
||||
|
||||
PROFILE = "/root/.hermes/profiles/sol"
|
||||
EXACT = {
|
||||
"identity": {".env", ".env.bak-20261014T165715Z"},
|
||||
"soul": {"SOUL.md"},
|
||||
"config": {".env.lock", "config.yaml", "config.yaml.bak-20261014T165715Z"},
|
||||
"state_db": {
|
||||
"state.db", "state.db-shm", "state.db-wal", "state.db.auto-maintenance.lock",
|
||||
"state.db.fts_rebuild.lock", "state.db.quarantine.lock", "auth.json",
|
||||
"auth.lock", ".skills_prompt_snapshot.json", "models_dev_cache.json",
|
||||
"models_dev_cache.etag",
|
||||
},
|
||||
"cache": {"cache", "audio_cache", "image_cache"},
|
||||
"sessions": {"sessions"},
|
||||
"skills": {"skills"},
|
||||
"plugins": {"plugins", "plugin-update-checks"},
|
||||
"logs": {"logs"},
|
||||
"backups": {"backups"},
|
||||
"vault": {"vault"},
|
||||
}
|
||||
|
||||
def classify(name, is_dir):
|
||||
for cat, names in EXACT.items():
|
||||
if name in names:
|
||||
return cat
|
||||
if is_dir:
|
||||
return "extension_dir"
|
||||
if name.endswith(".py"):
|
||||
return "script"
|
||||
if name.endswith((".yaml", ".json")):
|
||||
return "config_data"
|
||||
return "other"
|
||||
|
||||
def load(p):
|
||||
with open(p, encoding="utf-8") as fh:
|
||||
return json.load(fh)
|
||||
|
||||
def rederived():
|
||||
exp = {}
|
||||
for name in os.listdir(PROFILE):
|
||||
cat = classify(name, os.path.isdir(os.path.join(PROFILE, name)))
|
||||
exp[cat] = exp.get(cat, 0) + 1
|
||||
return exp
|
||||
|
||||
fails = []
|
||||
wiz_json = "/root/.hermes/wizard-outputs/sol/sol-profile-triage-2026-11-02.json"
|
||||
repo_json = "/root/troupe-standup/wizard-work/sol/sol-profile-triage-2026-11-02.json"
|
||||
if not os.path.isfile(wiz_json):
|
||||
fails.append("missing wizard-outputs artifact: " + wiz_json)
|
||||
if not os.path.isfile(repo_json):
|
||||
fails.append("missing repo artifact: " + repo_json)
|
||||
if fails:
|
||||
print("FAIL"); [print(" -", f) for f in fails]; sys.exit(1)
|
||||
if not os.path.isfile(wiz_json):
|
||||
fails.append("missing committed wizard-outputs copy: " + wiz_json)
|
||||
if not os.path.isfile(repo_json):
|
||||
fails.append("missing committed repo copy: " + repo_json)
|
||||
if fails:
|
||||
print("FAIL"); [print(" -", f) for f in fails]; sys.exit(1)
|
||||
|
||||
disk = rederived()
|
||||
for label, jpath in (("wizard-outputs", wiz_json), ("repo", repo_json)):
|
||||
d = load(jpath)
|
||||
if d.get("total_entries") != len(os.listdir(PROFILE)):
|
||||
fails.append("[" + label + "] total_entries mismatch")
|
||||
if d.get("categories") != disk:
|
||||
fails.append("[" + label + "] categories mismatch (got %s, want %s)"
|
||||
% (json.dumps(d.get("categories"), sort_keys=True),
|
||||
json.dumps(disk, sort_keys=True)))
|
||||
for e in d.get("entries", []):
|
||||
if e.get("category") != classify(e["name"], e.get("type") == "dir"):
|
||||
fails.append("[" + label + "] entry category mismatch: " + str(e.get("name")))
|
||||
elif not os.path.lexists(e.get("path", "")):
|
||||
fails.append("[" + label + "] referenced path no longer exists: " + str(e.get("path")))
|
||||
|
||||
print("PASS" if not fails else "FAIL")
|
||||
for f in fails:
|
||||
print(" -", f)
|
||||
sys.exit(1 if fails else 0)
|
||||
PY
|
||||
EXIT=$?
|
||||
if [ $EXIT -ne 0 ]; then
|
||||
echo "CHECK FAILED (exit $EXIT)"
|
||||
fi
|
||||
exit $EXIT
|
||||
'''
|
||||
|
||||
for tag in ("wiz", "repo"):
|
||||
base = WIZ if tag == "wiz" else REPO
|
||||
os.makedirs(base, exist_ok=True)
|
||||
cp = os.path.join(base, "check_sol_profile_triage_2026-11-02.sh")
|
||||
with open(cp, "w", encoding="utf-8") as fh:
|
||||
fh.write(check_content)
|
||||
os.chmod(cp, 0o755)
|
||||
|
||||
print("TOTAL", artifact["total_entries"])
|
||||
print("CATEGORIES", json.dumps(counts, sort_keys=True))
|
||||
print("WROTE", json_path)
|
||||
print("WROTE_MD", md_path)
|
||||
print("WROTE_WIZ_CHECK", os.path.join(WIZ, "check_sol_profile_triage_2026-11-02.sh"))
|
||||
print("WROTE_REPO_CHECK", os.path.join(REPO, "check_sol_profile_triage_2026-11-02.sh"))
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
@@ -1,18 +1,19 @@
|
||||
{
|
||||
"generated_utc": "2026-11-01T00:06:49Z",
|
||||
"generated_utc": "2026-11-02T00:09:45Z",
|
||||
"profile": "/root/.hermes/profiles/sol",
|
||||
"type": "sol-profile-triage",
|
||||
"generated_for": "2026-11-02",
|
||||
"total_entries": 69,
|
||||
"categories": {
|
||||
"identity": 2,
|
||||
"config": 3,
|
||||
"config_data": 2,
|
||||
"state_db": 11,
|
||||
"soul": 1,
|
||||
"script": 20,
|
||||
"cache": 3,
|
||||
"state_db": 10,
|
||||
"backups": 1,
|
||||
"extension_dir": 18,
|
||||
"config_data": 1,
|
||||
"other": 3,
|
||||
"logs": 1,
|
||||
"plugins": 2,
|
||||
@@ -23,348 +24,434 @@
|
||||
"entries": [
|
||||
{
|
||||
"name": ".env",
|
||||
"path": "/root/.hermes/profiles/sol/.env",
|
||||
"type": "file",
|
||||
"category": "identity"
|
||||
},
|
||||
{
|
||||
"name": ".env.bak-20261014T165715Z",
|
||||
"path": "/root/.hermes/profiles/sol/.env.bak-20261014T165715Z",
|
||||
"type": "file",
|
||||
"category": "identity"
|
||||
},
|
||||
{
|
||||
"name": ".env.lock",
|
||||
"path": "/root/.hermes/profiles/sol/.env.lock",
|
||||
"type": "file",
|
||||
"category": "config"
|
||||
},
|
||||
{
|
||||
"name": ".skills_prompt_snapshot.json",
|
||||
"path": "/root/.hermes/profiles/sol/.skills_prompt_snapshot.json",
|
||||
"type": "file",
|
||||
"category": "config_data"
|
||||
"category": "state_db"
|
||||
},
|
||||
{
|
||||
"name": "SOUL.md",
|
||||
"path": "/root/.hermes/profiles/sol/SOUL.md",
|
||||
"type": "file",
|
||||
"category": "soul"
|
||||
},
|
||||
{
|
||||
"name": "_check_repo_json.py",
|
||||
"path": "/root/.hermes/profiles/sol/_check_repo_json.py",
|
||||
"type": "file",
|
||||
"category": "script"
|
||||
},
|
||||
{
|
||||
"name": "_gen_daily_ledger_json.py",
|
||||
"path": "/root/.hermes/profiles/sol/_gen_daily_ledger_json.py",
|
||||
"type": "file",
|
||||
"category": "script"
|
||||
},
|
||||
{
|
||||
"name": "_gen_daily_ledger_report.py",
|
||||
"path": "/root/.hermes/profiles/sol/_gen_daily_ledger_report.py",
|
||||
"type": "file",
|
||||
"category": "script"
|
||||
},
|
||||
{
|
||||
"name": "_gen_daily_triage.py",
|
||||
"path": "/root/.hermes/profiles/sol/_gen_daily_triage.py",
|
||||
"type": "file",
|
||||
"category": "script"
|
||||
},
|
||||
{
|
||||
"name": "_gen_daily_triage_fresh.py",
|
||||
"path": "/root/.hermes/profiles/sol/_gen_daily_triage_fresh.py",
|
||||
"type": "file",
|
||||
"category": "script"
|
||||
},
|
||||
{
|
||||
"name": "_verify_daily_triage.py",
|
||||
"path": "/root/.hermes/profiles/sol/_verify_daily_triage.py",
|
||||
"type": "file",
|
||||
"category": "script"
|
||||
},
|
||||
{
|
||||
"name": "audio_cache",
|
||||
"path": "/root/.hermes/profiles/sol/audio_cache",
|
||||
"type": "dir",
|
||||
"category": "cache"
|
||||
},
|
||||
{
|
||||
"name": "auth.json",
|
||||
"path": "/root/.hermes/profiles/sol/auth.json",
|
||||
"type": "file",
|
||||
"category": "state_db"
|
||||
},
|
||||
{
|
||||
"name": "auth.lock",
|
||||
"path": "/root/.hermes/profiles/sol/auth.lock",
|
||||
"type": "file",
|
||||
"category": "state_db"
|
||||
},
|
||||
{
|
||||
"name": "backups",
|
||||
"path": "/root/.hermes/profiles/sol/backups",
|
||||
"type": "dir",
|
||||
"category": "backups"
|
||||
},
|
||||
{
|
||||
"name": "bin",
|
||||
"path": "/root/.hermes/profiles/sol/bin",
|
||||
"type": "dir",
|
||||
"category": "extension_dir"
|
||||
},
|
||||
{
|
||||
"name": "cache",
|
||||
"path": "/root/.hermes/profiles/sol/cache",
|
||||
"type": "dir",
|
||||
"category": "cache"
|
||||
},
|
||||
{
|
||||
"name": "config.yaml",
|
||||
"path": "/root/.hermes/profiles/sol/config.yaml",
|
||||
"type": "file",
|
||||
"category": "config"
|
||||
},
|
||||
{
|
||||
"name": "config.yaml.bak-20261014T165715Z",
|
||||
"path": "/root/.hermes/profiles/sol/config.yaml.bak-20261014T165715Z",
|
||||
"type": "file",
|
||||
"category": "config"
|
||||
},
|
||||
{
|
||||
"name": "context_length_cache.yaml",
|
||||
"path": "/root/.hermes/profiles/sol/context_length_cache.yaml",
|
||||
"type": "file",
|
||||
"category": "config_data"
|
||||
},
|
||||
{
|
||||
"name": "context_length_cache.yaml.lock",
|
||||
"path": "/root/.hermes/profiles/sol/context_length_cache.yaml.lock",
|
||||
"type": "file",
|
||||
"category": "other"
|
||||
},
|
||||
{
|
||||
"name": "cron",
|
||||
"path": "/root/.hermes/profiles/sol/cron",
|
||||
"type": "dir",
|
||||
"category": "extension_dir"
|
||||
},
|
||||
{
|
||||
"name": "cron-fleet-triage-2026-10-17.py",
|
||||
"path": "/root/.hermes/profiles/sol/cron-fleet-triage-2026-10-17.py",
|
||||
"type": "file",
|
||||
"category": "script"
|
||||
},
|
||||
{
|
||||
"name": "cron-fleet-triage-2026-10-18.py",
|
||||
"path": "/root/.hermes/profiles/sol/cron-fleet-triage-2026-10-18.py",
|
||||
"type": "file",
|
||||
"category": "script"
|
||||
},
|
||||
{
|
||||
"name": "cron-fleet-verify.py",
|
||||
"path": "/root/.hermes/profiles/sol/cron-fleet-verify.py",
|
||||
"type": "file",
|
||||
"category": "script"
|
||||
},
|
||||
{
|
||||
"name": "diag.py",
|
||||
"path": "/root/.hermes/profiles/sol/diag.py",
|
||||
"type": "file",
|
||||
"category": "script"
|
||||
},
|
||||
{
|
||||
"name": "diag2.py",
|
||||
"path": "/root/.hermes/profiles/sol/diag2.py",
|
||||
"type": "file",
|
||||
"category": "script"
|
||||
},
|
||||
{
|
||||
"name": "diag3.py",
|
||||
"path": "/root/.hermes/profiles/sol/diag3.py",
|
||||
"type": "file",
|
||||
"category": "script"
|
||||
},
|
||||
{
|
||||
"name": "diag4.py",
|
||||
"path": "/root/.hermes/profiles/sol/diag4.py",
|
||||
"type": "file",
|
||||
"category": "script"
|
||||
},
|
||||
{
|
||||
"name": "forge",
|
||||
"path": "/root/.hermes/profiles/sol/forge",
|
||||
"type": "dir",
|
||||
"category": "extension_dir"
|
||||
},
|
||||
{
|
||||
"name": "gateway.lock",
|
||||
"path": "/root/.hermes/profiles/sol/gateway.lock",
|
||||
"type": "file",
|
||||
"category": "other"
|
||||
},
|
||||
{
|
||||
"name": "gen_sol_profile_triage.py",
|
||||
"path": "/root/.hermes/profiles/sol/gen_sol_profile_triage.py",
|
||||
"type": "file",
|
||||
"category": "script"
|
||||
},
|
||||
{
|
||||
"name": "gen_sol_profile_triage_2026-10-31.py",
|
||||
"path": "/root/.hermes/profiles/sol/gen_sol_profile_triage_2026-10-31.py",
|
||||
"type": "file",
|
||||
"category": "script"
|
||||
},
|
||||
{
|
||||
"name": "home",
|
||||
"path": "/root/.hermes/profiles/sol/home",
|
||||
"type": "dir",
|
||||
"category": "extension_dir"
|
||||
},
|
||||
{
|
||||
"name": "hooks",
|
||||
"path": "/root/.hermes/profiles/sol/hooks",
|
||||
"type": "dir",
|
||||
"category": "extension_dir"
|
||||
},
|
||||
{
|
||||
"name": "image_cache",
|
||||
"path": "/root/.hermes/profiles/sol/image_cache",
|
||||
"type": "dir",
|
||||
"category": "cache"
|
||||
},
|
||||
{
|
||||
"name": "inventory_skills.py",
|
||||
"path": "/root/.hermes/profiles/sol/inventory_skills.py",
|
||||
"type": "file",
|
||||
"category": "script"
|
||||
},
|
||||
{
|
||||
"name": "keys",
|
||||
"path": "/root/.hermes/profiles/sol/keys",
|
||||
"type": "dir",
|
||||
"category": "extension_dir"
|
||||
},
|
||||
{
|
||||
"name": "logs",
|
||||
"path": "/root/.hermes/profiles/sol/logs",
|
||||
"type": "dir",
|
||||
"category": "logs"
|
||||
},
|
||||
{
|
||||
"name": "lsp",
|
||||
"path": "/root/.hermes/profiles/sol/lsp",
|
||||
"type": "dir",
|
||||
"category": "extension_dir"
|
||||
},
|
||||
{
|
||||
"name": "memories",
|
||||
"path": "/root/.hermes/profiles/sol/memories",
|
||||
"type": "dir",
|
||||
"category": "extension_dir"
|
||||
},
|
||||
{
|
||||
"name": "models_dev_cache.etag",
|
||||
"path": "/root/.hermes/profiles/sol/models_dev_cache.etag",
|
||||
"type": "file",
|
||||
"category": "state_db"
|
||||
},
|
||||
{
|
||||
"name": "models_dev_cache.json",
|
||||
"path": "/root/.hermes/profiles/sol/models_dev_cache.json",
|
||||
"type": "file",
|
||||
"category": "state_db"
|
||||
},
|
||||
{
|
||||
"name": "pairing",
|
||||
"path": "/root/.hermes/profiles/sol/pairing",
|
||||
"type": "dir",
|
||||
"category": "extension_dir"
|
||||
},
|
||||
{
|
||||
"name": "plans",
|
||||
"path": "/root/.hermes/profiles/sol/plans",
|
||||
"type": "dir",
|
||||
"category": "extension_dir"
|
||||
},
|
||||
{
|
||||
"name": "platforms",
|
||||
"path": "/root/.hermes/profiles/sol/platforms",
|
||||
"type": "dir",
|
||||
"category": "extension_dir"
|
||||
},
|
||||
{
|
||||
"name": "plugin-update-checks",
|
||||
"path": "/root/.hermes/profiles/sol/plugin-update-checks",
|
||||
"type": "dir",
|
||||
"category": "plugins"
|
||||
},
|
||||
{
|
||||
"name": "plugins",
|
||||
"path": "/root/.hermes/profiles/sol/plugins",
|
||||
"type": "dir",
|
||||
"category": "plugins"
|
||||
},
|
||||
{
|
||||
"name": "projects.db",
|
||||
"path": "/root/.hermes/profiles/sol/projects.db",
|
||||
"type": "file",
|
||||
"category": "other"
|
||||
},
|
||||
{
|
||||
"name": "runtime",
|
||||
"path": "/root/.hermes/profiles/sol/runtime",
|
||||
"type": "dir",
|
||||
"category": "extension_dir"
|
||||
},
|
||||
{
|
||||
"name": "sandboxes",
|
||||
"path": "/root/.hermes/profiles/sol/sandboxes",
|
||||
"type": "dir",
|
||||
"category": "extension_dir"
|
||||
},
|
||||
{
|
||||
"name": "sessions",
|
||||
"path": "/root/.hermes/profiles/sol/sessions",
|
||||
"type": "dir",
|
||||
"category": "sessions"
|
||||
},
|
||||
{
|
||||
"name": "skills",
|
||||
"path": "/root/.hermes/profiles/sol/skills",
|
||||
"type": "dir",
|
||||
"category": "skills"
|
||||
},
|
||||
{
|
||||
"name": "skins",
|
||||
"path": "/root/.hermes/profiles/sol/skins",
|
||||
"type": "dir",
|
||||
"category": "extension_dir"
|
||||
},
|
||||
{
|
||||
"name": "source-checks",
|
||||
"path": "/root/.hermes/profiles/sol/source-checks",
|
||||
"type": "dir",
|
||||
"category": "extension_dir"
|
||||
},
|
||||
{
|
||||
"name": "state",
|
||||
"path": "/root/.hermes/profiles/sol/state",
|
||||
"type": "dir",
|
||||
"category": "extension_dir"
|
||||
},
|
||||
{
|
||||
"name": "state.db",
|
||||
"path": "/root/.hermes/profiles/sol/state.db",
|
||||
"type": "file",
|
||||
"category": "state_db"
|
||||
},
|
||||
{
|
||||
"name": "state.db-shm",
|
||||
"path": "/root/.hermes/profiles/sol/state.db-shm",
|
||||
"type": "file",
|
||||
"category": "state_db"
|
||||
},
|
||||
{
|
||||
"name": "state.db-wal",
|
||||
"path": "/root/.hermes/profiles/sol/state.db-wal",
|
||||
"type": "file",
|
||||
"category": "state_db"
|
||||
},
|
||||
{
|
||||
"name": "state.db.auto-maintenance.lock",
|
||||
"path": "/root/.hermes/profiles/sol/state.db.auto-maintenance.lock",
|
||||
"type": "file",
|
||||
"category": "state_db"
|
||||
},
|
||||
{
|
||||
"name": "state.db.fts_rebuild.lock",
|
||||
"path": "/root/.hermes/profiles/sol/state.db.fts_rebuild.lock",
|
||||
"type": "file",
|
||||
"category": "state_db"
|
||||
},
|
||||
{
|
||||
"name": "state.db.quarantine.lock",
|
||||
"path": "/root/.hermes/profiles/sol/state.db.quarantine.lock",
|
||||
"type": "file",
|
||||
"category": "state_db"
|
||||
},
|
||||
{
|
||||
"name": "triage_check.py",
|
||||
"path": "/root/.hermes/profiles/sol/triage_check.py",
|
||||
"type": "file",
|
||||
"category": "script"
|
||||
},
|
||||
{
|
||||
"name": "triage_profiles.py",
|
||||
"path": "/root/.hermes/profiles/sol/triage_profiles.py",
|
||||
"type": "file",
|
||||
"category": "script"
|
||||
},
|
||||
{
|
||||
"name": "triage_skill_report.py",
|
||||
"path": "/root/.hermes/profiles/sol/triage_skill_report.py",
|
||||
"type": "file",
|
||||
"category": "script"
|
||||
},
|
||||
{
|
||||
"name": "vault",
|
||||
"path": "/root/.hermes/profiles/sol/vault",
|
||||
"type": "dir",
|
||||
"category": "vault"
|
||||
},
|
||||
{
|
||||
"name": "verify_skills.py",
|
||||
"path": "/root/.hermes/profiles/sol/verify_skills.py",
|
||||
"type": "file",
|
||||
"category": "script"
|
||||
},
|
||||
{
|
||||
"name": "wizard-outputs",
|
||||
"path": "/root/.hermes/profiles/sol/wizard-outputs",
|
||||
"type": "dir",
|
||||
"category": "extension_dir"
|
||||
},
|
||||
{
|
||||
"name": "workspace",
|
||||
"path": "/root/.hermes/profiles/sol/workspace",
|
||||
"type": "dir",
|
||||
"category": "extension_dir"
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"rules": {
|
||||
"identity": "exact name in identity set",
|
||||
"soul": "exact name SOUL.md",
|
||||
"config": "exact name in config set",
|
||||
"state_db": "exact name in state_db set",
|
||||
"cache": "exact name in cache set",
|
||||
"sessions": "exact name in sessions set",
|
||||
"skills": "exact name in skills set",
|
||||
"plugins": "exact name in plugins set",
|
||||
"logs": "exact name in logs set",
|
||||
"backups": "exact name in backups set",
|
||||
"vault": "exact name in vault set",
|
||||
"extension_dir": "any directory",
|
||||
"script": "name ends with .py",
|
||||
"config_data": "name ends with .yaml or .json",
|
||||
"other": "none of the above"
|
||||
}
|
||||
}
|
||||
@@ -1,44 +1,16 @@
|
||||
# Sol profile directory triage - 2026-11-02
|
||||
# Sol profile triage - 2026-11-02
|
||||
|
||||
Re-derived from the live profile dir `/root/.hermes/profiles/sol`.
|
||||
Generated (UTC): 2026-11-01T00:06:16Z
|
||||
Re-derived from the live profile dir /root/.hermes/profiles/sol.
|
||||
Generated (UTC): 2026-11-02T00:09:45Z
|
||||
Total entries on disk: 69
|
||||
Category counts: {"backups": 1, "cache": 3, "config": 3, "config_data": 1, "extension_dir": 18, "identity": 2, "logs": 1, "other": 3, "plugins": 2, "script": 20, "sessions": 1, "skills": 1, "soul": 1, "state_db": 11, "vault": 1}
|
||||
|
||||
Category counts: {"backups": 1, "cache": 3, "config": 3, "config_data": 2, "extension_dir": 18, "identity": 2, "logs": 1, "other": 3, "plugins": 2, "script": 20, "sessions": 1, "skills": 1, "soul": 1, "state_db": 10, "vault": 1}
|
||||
|
||||
## Summary
|
||||
|
||||
- **files**: 41
|
||||
- **dirs**: 28
|
||||
- **scripts (.py)**: 20
|
||||
- **extension dirs**: 18
|
||||
|
||||
## Category totals
|
||||
|
||||
| category | count |
|
||||
|---|---|
|
||||
| backups | 1 |
|
||||
| cache | 3 |
|
||||
| config | 3 |
|
||||
| config_data | 2 |
|
||||
| extension_dir | 18 |
|
||||
| identity | 2 |
|
||||
| logs | 1 |
|
||||
| other | 3 |
|
||||
| plugins | 2 |
|
||||
| script | 20 |
|
||||
| sessions | 1 |
|
||||
| skills | 1 |
|
||||
| soul | 1 |
|
||||
| state_db | 10 |
|
||||
| vault | 1 |
|
||||
|
||||
## Top-level entries (name -> category)
|
||||
## Entries
|
||||
|
||||
- **.env** (file) -> identity
|
||||
- **.env.bak-20261014T165715Z** (file) -> identity
|
||||
- **.env.lock** (file) -> config
|
||||
- **.skills_prompt_snapshot.json** (file) -> config_data
|
||||
- **.skills_prompt_snapshot.json** (file) -> state_db
|
||||
- **SOUL.md** (file) -> soul
|
||||
- **_check_repo_json.py** (file) -> script
|
||||
- **_gen_daily_ledger_json.py** (file) -> script
|
||||
|
||||
Reference in new issue
Block a user