diff --git a/wizard-work/sol/check_sol_profile_triage_2026-11-01.sh b/wizard-work/sol/check_sol_profile_triage_2026-11-01.sh new file mode 100644 index 0000000..0dca3fe --- /dev/null +++ b/wizard-work/sol/check_sol_profile_triage_2026-11-01.sh @@ -0,0 +1,78 @@ +#!/usr/bin/env bash +# CHECK -- sol: sol-profile-triage-2026-11-01 re-derives the classification +# from the live profile dir and verifies the committed JSON against disk. +# Exit code 0 iff the committed artifact is correct; nonzero otherwise. +set -u +python3 - <<'PY' +import os, json, sys +PROFILE = "/root/.hermes/profiles/sol" +REPO_JSON = "/root/troupe-standup/wizard-work/sol/sol-profile-triage-2026-11-01.json" + +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 expected(): + exp = {} + for name in os.listdir(PROFILE): + exp[classify(name, os.path.isdir(os.path.join(PROFILE, name)))] = exp.get(classify(name, os.path.isdir(os.path.join(PROFILE, name))), 0) + 1 + return exp + +def load(p): + with open(p, encoding="utf-8") as fh: + return json.load(fh) + +fails = [] +if not os.path.isfile(REPO_JSON): + fails.append("missing committed artifact: " + REPO_JSON) +else: + disk_cats = expected() + d = load(REPO_JSON) + if d.get("total_entries") != len(os.listdir(PROFILE)): + fails.append("total_entries mismatch: %r vs %d" % (d.get("total_entries"), len(os.listdir(PROFILE)))) + if d.get("categories") != disk_cats: + fails.append("categories mismatch: %r vs %r" % (d.get("categories"), disk_cats)) + for e in d.get("entries", []): + if not os.path.lexists(e.get("path", "")): + fails.append("entry path no longer exists: " + str(e.get("path"))) + for e in d.get("entries", []): + if e.get("category") != classify(e["name"], e.get("type") == "dir"): + fails.append("entry category mismatch: " + e["name"]) +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 diff --git a/wizard-work/sol/sol-profile-triage-2026-11-01.json b/wizard-work/sol/sol-profile-triage-2026-11-01.json new file mode 100644 index 0000000..60fa2ed --- /dev/null +++ b/wizard-work/sol/sol-profile-triage-2026-11-01.json @@ -0,0 +1,457 @@ +{ + "generated_utc": "2026-10-31T23:58:42Z", + "profile": "/root/.hermes/profiles/sol", + "type": "sol-profile-triage", + "generated_for": "2026-11-01", + "total_entries": 69, + "categories": { + "identity": 2, + "config": 3, + "state_db": 11, + "soul": 1, + "script": 20, + "cache": 3, + "backups": 1, + "extension_dir": 18, + "config_data": 1, + "other": 3, + "logs": 1, + "plugins": 2, + "sessions": 1, + "skills": 1, + "vault": 1 + }, + "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": "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" + } +} diff --git a/wizard-work/sol/sol-profile-triage-2026-11-01.md b/wizard-work/sol/sol-profile-triage-2026-11-01.md new file mode 100644 index 0000000..3a26462 --- /dev/null +++ b/wizard-work/sol/sol-profile-triage-2026-11-01.md @@ -0,0 +1,78 @@ +# Sol profile triage - 2026-11-01 + +Re-derived from the live profile dir /root/.hermes/profiles/sol. +Generated (UTC): 2026-10-31T23:58:42Z +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} + +## Entries + +- **.env** (file) -> identity +- **.env.bak-20261014T165715Z** (file) -> identity +- **.env.lock** (file) -> config +- **.skills_prompt_snapshot.json** (file) -> state_db +- **SOUL.md** (file) -> soul +- **_check_repo_json.py** (file) -> script +- **_gen_daily_ledger_json.py** (file) -> script +- **_gen_daily_ledger_report.py** (file) -> script +- **_gen_daily_triage.py** (file) -> script +- **_gen_daily_triage_fresh.py** (file) -> script +- **_verify_daily_triage.py** (file) -> script +- **audio_cache** (dir) -> cache +- **auth.json** (file) -> state_db +- **auth.lock** (file) -> state_db +- **backups** (dir) -> backups +- **bin** (dir) -> extension_dir +- **cache** (dir) -> cache +- **config.yaml** (file) -> config +- **config.yaml.bak-20261014T165715Z** (file) -> config +- **context_length_cache.yaml** (file) -> config_data +- **context_length_cache.yaml.lock** (file) -> other +- **cron** (dir) -> extension_dir +- **cron-fleet-triage-2026-10-17.py** (file) -> script +- **cron-fleet-triage-2026-10-18.py** (file) -> script +- **cron-fleet-verify.py** (file) -> script +- **diag.py** (file) -> script +- **diag2.py** (file) -> script +- **diag3.py** (file) -> script +- **diag4.py** (file) -> script +- **forge** (dir) -> extension_dir +- **gateway.lock** (file) -> other +- **gen_sol_profile_triage.py** (file) -> script +- **gen_sol_profile_triage_2026-10-31.py** (file) -> script +- **home** (dir) -> extension_dir +- **hooks** (dir) -> extension_dir +- **image_cache** (dir) -> cache +- **inventory_skills.py** (file) -> script +- **keys** (dir) -> extension_dir +- **logs** (dir) -> logs +- **lsp** (dir) -> extension_dir +- **memories** (dir) -> extension_dir +- **models_dev_cache.etag** (file) -> state_db +- **models_dev_cache.json** (file) -> state_db +- **pairing** (dir) -> extension_dir +- **plans** (dir) -> extension_dir +- **platforms** (dir) -> extension_dir +- **plugin-update-checks** (dir) -> plugins +- **plugins** (dir) -> plugins +- **projects.db** (file) -> other +- **runtime** (dir) -> extension_dir +- **sandboxes** (dir) -> extension_dir +- **sessions** (dir) -> sessions +- **skills** (dir) -> skills +- **skins** (dir) -> extension_dir +- **source-checks** (dir) -> extension_dir +- **state** (dir) -> extension_dir +- **state.db** (file) -> state_db +- **state.db-shm** (file) -> state_db +- **state.db-wal** (file) -> state_db +- **state.db.auto-maintenance.lock** (file) -> state_db +- **state.db.fts_rebuild.lock** (file) -> state_db +- **state.db.quarantine.lock** (file) -> state_db +- **triage_check.py** (file) -> script +- **triage_profiles.py** (file) -> script +- **triage_skill_report.py** (file) -> script +- **vault** (dir) -> vault +- **verify_skills.py** (file) -> script +- **wizard-outputs** (dir) -> extension_dir +- **workspace** (dir) -> extension_dir