diff --git a/wizard-work/sol/check_sol_profile_triage_2026-11-02.sh b/wizard-work/sol/check_sol_profile_triage_2026-11-02.sh new file mode 100755 index 0000000..1960205 --- /dev/null +++ b/wizard-work/sol/check_sol_profile_triage_2026-11-02.sh @@ -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 diff --git a/wizard-work/sol/gen_sol_profile_triage_2026-11-02.py b/wizard-work/sol/gen_sol_profile_triage_2026-11-02.py new file mode 100644 index 0000000..43c01a6 --- /dev/null +++ b/wizard-work/sol/gen_sol_profile_triage_2026-11-02.py @@ -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() diff --git a/wizard-work/sol/sol-profile-triage-2026-11-02.json b/wizard-work/sol/sol-profile-triage-2026-11-02.json index b929db2..37c0c89 100644 --- a/wizard-work/sol/sol-profile-triage-2026-11-02.json +++ b/wizard-work/sol/sol-profile-triage-2026-11-02.json @@ -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" } - ] -} \ No newline at end of file + ], + "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-02.md b/wizard-work/sol/sol-profile-triage-2026-11-02.md index 4249d85..6a3d80a 100644 --- a/wizard-work/sol/sol-profile-triage-2026-11-02.md +++ b/wizard-work/sol/sol-profile-triage-2026-11-02.md @@ -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