diff --git a/wizard-work/sol/Triage-2026-11-02.json b/wizard-work/sol/Triage-2026-11-02.json index e1c94eb..3b8ac8b 100644 --- a/wizard-work/sol/Triage-2026-11-02.json +++ b/wizard-work/sol/Triage-2026-11-02.json @@ -20,77 +20,422 @@ "skills": 1, "vault": 1 }, - "note": "Fresh re-derivation from the live profile directory; sizes captured with os.path.getsize (dir bytes via recursive walk). Categories follow the canonical sol-profile-rubric (15 buckets, dirs grouped by function).", + "note": "Live re-derivation from /root/.hermes/profiles/sol; size_bytes = recursive dir byte sum (0 for symlink). Categories follow the canonical sol-profile rubric (15 buckets).", "changes": [], "entries": [ - {"name": ".env.bak-20261014T165715Z", "type": "file", "size_bytes": 165, "category": "identity"}, - {"name": ".env.lock", "type": "file", "size_bytes": 0, "category": "config"}, - {"name": ".env", "type": "file", "size_bytes": 165, "category": "identity"}, - {"name": ".skills_prompt_snapshot.json", "type": "file", "size_bytes": 42870, "category": "config_data"}, - {"name": "SOUL.md", "type": "file", "size_bytes": 685, "category": "soul"}, - {"name": "_check_repo_json.py", "type": "file", "size_bytes": 515, "category": "script"}, - {"name": "_gen_daily_ledger_json.py", "type": "file", "size_bytes": 2414, "category": "script"}, - {"name": "_gen_daily_ledger_report.py", "type": "file", "size_bytes": 3340, "category": "script"}, - {"name": "_gen_daily_triage.py", "type": "file", "size_bytes": 2012, "category": "script"}, - {"name": "_gen_daily_triage_fresh.py", "type": "file", "size_bytes": 1475, "category": "script"}, - {"name": "_verify_daily_triage.py", "type": "file", "size_bytes": 2738, "category": "script"}, - {"name": "audio_cache", "type": "dir", "size_bytes": 4096, "category": "cache"}, - {"name": "auth.json", "type": "file", "size_bytes": 143, "category": "state_db"}, - {"name": "auth.lock", "type": "file", "size_bytes": 0, "category": "state_db"}, - {"name": "backups", "type": "dir", "size_bytes": 4096, "category": "backups"}, - {"name": "bin", "type": "dir", "size_bytes": 4096, "category": "extension_dir"}, - {"name": "cache", "type": "dir", "size_bytes": 4096, "category": "cache"}, - {"name": "config.yaml", "type": "file", "size_bytes": 510, "category": "config"}, - {"name": "config.yaml.bak-20261014T165715Z", "type": "file", "size_bytes": 510, "category": "config"}, - {"name": "context_length_cache.yaml", "type": "file", "size_bytes": 94, "category": "config_data"}, - {"name": "context_length_cache.yaml.lock", "type": "file", "size_bytes": 0, "category": "other"}, - {"name": "cron", "type": "dir", "size_bytes": 4096, "category": "extension_dir"}, - {"name": "cron-fleet-triage-2026-10-17.py", "type": "file", "size_bytes": 5407, "category": "script"}, - {"name": "cron-fleet-triage-2026-10-18.py", "type": "file", "size_bytes": 5355, "category": "script"}, - {"name": "cron-fleet-verify.py", "type": "file", "size_bytes": 1790, "category": "script"}, - {"name": "diag.py", "type": "file", "size_bytes": 1182, "category": "script"}, - {"name": "diag2.py", "type": "file", "size_bytes": 550, "category": "script"}, - {"name": "diag3.py", "type": "file", "size_bytes": 1401, "category": "script"}, - {"name": "diag4.py", "type": "file", "size_bytes": 1000, "category": "script"}, - {"name": "forge", "type": "dir", "size_bytes": 4096, "category": "extension_dir"}, - {"name": "gateway.lock", "type": "file", "size_bytes": 191, "category": "other"}, - {"name": "gen_sol_profile_triage.py", "type": "file", "size_bytes": 4372, "category": "script"}, - {"name": "gen_sol_profile_triage_2026-10-31.py", "type": "file", "size_bytes": 8084, "category": "script"}, - {"name": "home", "type": "dir", "size_bytes": 4096, "category": "extension_dir"}, - {"name": "hooks", "type": "dir", "size_bytes": 4096, "category": "extension_dir"}, - {"name": "image_cache", "type": "dir", "size_bytes": 4096, "category": "cache"}, - {"name": "inventory_skills.py", "type": "file", "size_bytes": 6472, "category": "script"}, - {"name": "keys", "type": "dir", "size_bytes": 4096, "category": "extension_dir"}, - {"name": "logs", "type": "dir", "size_bytes": 4096, "category": "logs"}, - {"name": "lsp", "type": "dir", "size_bytes": 4096, "category": "extension_dir"}, - {"name": "memories", "type": "dir", "size_bytes": 4096, "category": "extension_dir"}, - {"name": "models_dev_cache.etag", "type": "file", "size_bytes": 36, "category": "state_db"}, - {"name": "models_dev_cache.json", "type": "file", "size_bytes": 5963884, "category": "state_db"}, - {"name": "pairing", "type": "dir", "size_bytes": 4096, "category": "extension_dir"}, - {"name": "plans", "type": "dir", "size_bytes": 4096, "category": "extension_dir"}, - {"name": "platforms", "type": "dir", "size_bytes": 4096, "category": "extension_dir"}, - {"name": "plugin-update-checks", "type": "dir", "size_bytes": 4096, "category": "plugins"}, - {"name": "plugins", "type": "dir", "size_bytes": 4096, "category": "plugins"}, - {"name": "projects.db", "type": "file", "size_bytes": 45056, "category": "other"}, - {"name": "runtime", "type": "dir", "size_bytes": 4096, "category": "extension_dir"}, - {"name": "sandboxes", "type": "dir", "size_bytes": 4096, "category": "extension_dir"}, - {"name": "sessions", "type": "dir", "size_bytes": 4096, "category": "sessions"}, - {"name": "skills", "type": "dir", "size_bytes": 4096, "category": "skills"}, - {"name": "skins", "type": "dir", "size_bytes": 4096, "category": "extension_dir"}, - {"name": "source-checks", "type": "dir", "size_bytes": 4096, "category": "extension_dir"}, - {"name": "state", "type": "dir", "size_bytes": 4096, "category": "extension_dir"}, - {"name": "state.db", "type": "file", "size_bytes": 149987328, "category": "state_db"}, - {"name": "state.db-shm", "type": "file", "size_bytes": 32768, "category": "state_db"}, - {"name": "state.db-wal", "type": "file", "size_bytes": 5891632, "category": "state_db"}, - {"name": "state.db.auto-maintenance.lock", "type": "file", "size_bytes": 0, "category": "state_db"}, - {"name": "state.db.fts_rebuild.lock", "type": "file", "size_bytes": 0, "category": "state_db"}, - {"name": "state.db.quarantine.lock", "type": "file", "size_bytes": 0, "category": "state_db"}, - {"name": "triage_check.py", "type": "file", "size_bytes": 3732, "category": "script"}, - {"name": "triage_profiles.py", "type": "file", "size_bytes": 4093, "category": "script"}, - {"name": "triage_skill_report.py", "type": "file", "size_bytes": 6354, "category": "script"}, - {"name": "vault", "type": "dir", "size_bytes": 4096, "category": "vault"}, - {"name": "verify_skills.py", "type": "file", "size_bytes": 1442, "category": "script"}, - {"name": "wizard-outputs", "type": "dir", "size_bytes": 4096, "category": "extension_dir"}, - {"name": "workspace", "type": "dir", "size_bytes": 4096, "category": "extension_dir"} + { + "name": ".env", + "type": "file", + "size_bytes": 165, + "category": "identity" + }, + { + "name": ".env.bak-20261014T165715Z", + "type": "file", + "size_bytes": 165, + "category": "identity" + }, + { + "name": ".env.lock", + "type": "file", + "size_bytes": 0, + "category": "config" + }, + { + "name": ".skills_prompt_snapshot.json", + "type": "file", + "size_bytes": 42870, + "category": "config_data" + }, + { + "name": "SOUL.md", + "type": "file", + "size_bytes": 685, + "category": "soul" + }, + { + "name": "_check_repo_json.py", + "type": "file", + "size_bytes": 515, + "category": "script" + }, + { + "name": "_gen_daily_ledger_json.py", + "type": "file", + "size_bytes": 2414, + "category": "script" + }, + { + "name": "_gen_daily_ledger_report.py", + "type": "file", + "size_bytes": 3340, + "category": "script" + }, + { + "name": "_gen_daily_triage.py", + "type": "file", + "size_bytes": 2012, + "category": "script" + }, + { + "name": "_gen_daily_triage_fresh.py", + "type": "file", + "size_bytes": 1475, + "category": "script" + }, + { + "name": "_verify_daily_triage.py", + "type": "file", + "size_bytes": 2738, + "category": "script" + }, + { + "name": "audio_cache", + "type": "dir", + "size_bytes": 0, + "category": "cache" + }, + { + "name": "auth.json", + "type": "file", + "size_bytes": 143, + "category": "state_db" + }, + { + "name": "auth.lock", + "type": "file", + "size_bytes": 0, + "category": "state_db" + }, + { + "name": "backups", + "type": "dir", + "size_bytes": 6231, + "category": "backups" + }, + { + "name": "bin", + "type": "dir", + "size_bytes": 38919491, + "category": "extension_dir" + }, + { + "name": "cache", + "type": "dir", + "size_bytes": 31756048, + "category": "cache" + }, + { + "name": "config.yaml", + "type": "file", + "size_bytes": 510, + "category": "config" + }, + { + "name": "config.yaml.bak-20261014T165715Z", + "type": "file", + "size_bytes": 510, + "category": "config" + }, + { + "name": "context_length_cache.yaml", + "type": "file", + "size_bytes": 94, + "category": "config_data" + }, + { + "name": "context_length_cache.yaml.lock", + "type": "file", + "size_bytes": 0, + "category": "other" + }, + { + "name": "cron", + "type": "dir", + "size_bytes": 24619, + "category": "extension_dir" + }, + { + "name": "cron-fleet-triage-2026-10-17.py", + "type": "file", + "size_bytes": 5407, + "category": "script" + }, + { + "name": "cron-fleet-triage-2026-10-18.py", + "type": "file", + "size_bytes": 5355, + "category": "script" + }, + { + "name": "cron-fleet-verify.py", + "type": "file", + "size_bytes": 1790, + "category": "script" + }, + { + "name": "diag.py", + "type": "file", + "size_bytes": 1182, + "category": "script" + }, + { + "name": "diag2.py", + "type": "file", + "size_bytes": 550, + "category": "script" + }, + { + "name": "diag3.py", + "type": "file", + "size_bytes": 1401, + "category": "script" + }, + { + "name": "diag4.py", + "type": "file", + "size_bytes": 1000, + "category": "script" + }, + { + "name": "forge", + "type": "dir", + "size_bytes": 1322, + "category": "extension_dir" + }, + { + "name": "gateway.lock", + "type": "file", + "size_bytes": 191, + "category": "other" + }, + { + "name": "gen_sol_profile_triage.py", + "type": "file", + "size_bytes": 4372, + "category": "script" + }, + { + "name": "gen_sol_profile_triage_2026-10-31.py", + "type": "file", + "size_bytes": 8084, + "category": "script" + }, + { + "name": "home", + "type": "dir", + "size_bytes": 0, + "category": "extension_dir" + }, + { + "name": "hooks", + "type": "dir", + "size_bytes": 0, + "category": "extension_dir" + }, + { + "name": "image_cache", + "type": "dir", + "size_bytes": 0, + "category": "cache" + }, + { + "name": "inventory_skills.py", + "type": "file", + "size_bytes": 6472, + "category": "script" + }, + { + "name": "keys", + "type": "dir", + "size_bytes": 184, + "category": "extension_dir" + }, + { + "name": "logs", + "type": "dir", + "size_bytes": 6202768, + "category": "logs" + }, + { + "name": "lsp", + "type": "dir", + "size_bytes": 41274356, + "category": "extension_dir" + }, + { + "name": "memories", + "type": "dir", + "size_bytes": 700, + "category": "extension_dir" + }, + { + "name": "models_dev_cache.etag", + "type": "file", + "size_bytes": 36, + "category": "state_db" + }, + { + "name": "models_dev_cache.json", + "type": "file", + "size_bytes": 5963821, + "category": "state_db" + }, + { + "name": "pairing", + "type": "dir", + "size_bytes": 0, + "category": "extension_dir" + }, + { + "name": "plans", + "type": "dir", + "size_bytes": 0, + "category": "extension_dir" + }, + { + "name": "platforms", + "type": "dir", + "size_bytes": 0, + "category": "extension_dir" + }, + { + "name": "plugin-update-checks", + "type": "dir", + "size_bytes": 13, + "category": "plugins" + }, + { + "name": "plugins", + "type": "dir", + "size_bytes": 0, + "category": "plugins" + }, + { + "name": "projects.db", + "type": "file", + "size_bytes": 45056, + "category": "other" + }, + { + "name": "runtime", + "type": "dir", + "size_bytes": 301, + "category": "extension_dir" + }, + { + "name": "sandboxes", + "type": "dir", + "size_bytes": 0, + "category": "extension_dir" + }, + { + "name": "sessions", + "type": "dir", + "size_bytes": 477485, + "category": "sessions" + }, + { + "name": "skills", + "type": "dir", + "size_bytes": 2815429, + "category": "skills" + }, + { + "name": "skins", + "type": "dir", + "size_bytes": 0, + "category": "extension_dir" + }, + { + "name": "source-checks", + "type": "dir", + "size_bytes": 895, + "category": "extension_dir" + }, + { + "name": "state", + "type": "dir", + "size_bytes": 0, + "category": "extension_dir" + }, + { + "name": "state.db", + "type": "file", + "size_bytes": 156483584, + "category": "state_db" + }, + { + "name": "state.db-shm", + "type": "file", + "size_bytes": 32768, + "category": "state_db" + }, + { + "name": "state.db-wal", + "type": "file", + "size_bytes": 5891632, + "category": "state_db" + }, + { + "name": "state.db.auto-maintenance.lock", + "type": "file", + "size_bytes": 0, + "category": "state_db" + }, + { + "name": "state.db.fts_rebuild.lock", + "type": "file", + "size_bytes": 0, + "category": "state_db" + }, + { + "name": "state.db.quarantine.lock", + "type": "file", + "size_bytes": 0, + "category": "state_db" + }, + { + "name": "triage_check.py", + "type": "file", + "size_bytes": 3732, + "category": "script" + }, + { + "name": "triage_profiles.py", + "type": "file", + "size_bytes": 4093, + "category": "script" + }, + { + "name": "triage_skill_report.py", + "type": "file", + "size_bytes": 6354, + "category": "script" + }, + { + "name": "vault", + "type": "dir", + "size_bytes": 0, + "category": "vault" + }, + { + "name": "verify_skills.py", + "type": "file", + "size_bytes": 1442, + "category": "script" + }, + { + "name": "wizard-outputs", + "type": "dir", + "size_bytes": 29042, + "category": "extension_dir" + }, + { + "name": "workspace", + "type": "dir", + "size_bytes": 0, + "category": "extension_dir" + } ] } diff --git a/wizard-work/sol/Triage-2026-11-02.md b/wizard-work/sol/Triage-2026-11-02.md index 016104b..8cb2828 100644 --- a/wizard-work/sol/Triage-2026-11-02.md +++ b/wizard-work/sol/Triage-2026-11-02.md @@ -1,16 +1,11 @@ # Triage 2026-11-02 — sol profile top-level entries -Fresh, independent re-derivation of the classification of the top-level entries -of the live `sol` Hermes profile directory -`/root/.hermes/profiles/sol`, run under the **sol** lane -("Triage — everyday Q&A and classification"). +Fresh, independent re-derivation of the classification of the top-level entries of the live `sol` Hermes profile directory `/root/.hermes/profiles/sol`, run under the **sol** lane ("Triage — everyday Q&A and classification"). ## Scope -- 69 top-level entries (28 directories, 41 files) under - `/root/.hermes/profiles/sol`. -- Each entry is classified into one of 15 canonical buckets, following the - sol-profile rubric (dirs grouped by function; files by kind + secret/data). +- 69 top-level entries (28 directories, 41 files). +- Each entry is classified into one of the 15 canonical buckets, following the sol-profile rubric (dirs grouped by function; files by kind + secret/data). ## Rubric (15 categories) @@ -36,10 +31,32 @@ of the live `sol` Hermes profile directory - `Triage-2026-11-02.json` — the committed artifact (entry list + category counts). - `verify_sol_triage_2026_11_02.py` — independent re-derivation + cross-checks. -- `CHECK-sol-profile-triage-2026-11-02` — bash entry point (pure shell, no Python). +- `CHECK-2026-11-02` — bash entry point (pure shell, no Python). + +## Counts + +| Category | Entries | +|---|---| +| 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 | + +- Total on-disk size across all top-level entries: 290034842 bytes (recursive dir sums). ## Run - bash CHECK-sol-profile-triage-2026-11-02 + bash CHECK-2026-11-02 Exit 0 = PASS (real re-derivation verified against the live directory). diff --git a/wizard-work/sol/Triage-sol-profile-2026-11-02.json b/wizard-work/sol/Triage-sol-profile-2026-11-02.json new file mode 100644 index 0000000..80c5a36 --- /dev/null +++ b/wizard-work/sol/Triage-sol-profile-2026-11-02.json @@ -0,0 +1,442 @@ +{ + "generated_utc": "2026-11-01T14:41:36Z", + "profile": "/root/.hermes/profiles/sol", + "type": "sol-profile-triage", + "total_entries": 69, + "categories": { + "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 + }, + "note": "Fresh independent re-derivation from the live profile directory; size_bytes = recursive dir byte sum for dirs, os.path.getsize for files.", + "changes": [], + "entries": [ + { + "name": ".env", + "type": "file", + "size_bytes": 165, + "category": "identity" + }, + { + "name": ".env.bak-20261014T165715Z", + "type": "file", + "size_bytes": 165, + "category": "identity" + }, + { + "name": ".env.lock", + "type": "file", + "size_bytes": 0, + "category": "config" + }, + { + "name": ".skills_prompt_snapshot.json", + "type": "file", + "size_bytes": 42870, + "category": "config_data" + }, + { + "name": "SOUL.md", + "type": "file", + "size_bytes": 685, + "category": "soul" + }, + { + "name": "_check_repo_json.py", + "type": "file", + "size_bytes": 515, + "category": "script" + }, + { + "name": "_gen_daily_ledger_json.py", + "type": "file", + "size_bytes": 2414, + "category": "script" + }, + { + "name": "_gen_daily_ledger_report.py", + "type": "file", + "size_bytes": 3340, + "category": "script" + }, + { + "name": "_gen_daily_triage.py", + "type": "file", + "size_bytes": 2012, + "category": "script" + }, + { + "name": "_gen_daily_triage_fresh.py", + "type": "file", + "size_bytes": 1475, + "category": "script" + }, + { + "name": "_verify_daily_triage.py", + "type": "file", + "size_bytes": 2738, + "category": "script" + }, + { + "name": "audio_cache", + "type": "dir", + "size_bytes": 0, + "category": "cache" + }, + { + "name": "auth.json", + "type": "file", + "size_bytes": 143, + "category": "state_db" + }, + { + "name": "auth.lock", + "type": "file", + "size_bytes": 0, + "category": "state_db" + }, + { + "name": "backups", + "type": "dir", + "size_bytes": 6231, + "category": "backups" + }, + { + "name": "bin", + "type": "dir", + "size_bytes": 38919491, + "category": "extension_dir" + }, + { + "name": "cache", + "type": "dir", + "size_bytes": 31809619, + "category": "cache" + }, + { + "name": "config.yaml", + "type": "file", + "size_bytes": 510, + "category": "config" + }, + { + "name": "config.yaml.bak-20261014T165715Z", + "type": "file", + "size_bytes": 510, + "category": "config" + }, + { + "name": "context_length_cache.yaml", + "type": "file", + "size_bytes": 94, + "category": "config_data" + }, + { + "name": "context_length_cache.yaml.lock", + "type": "file", + "size_bytes": 0, + "category": "other" + }, + { + "name": "cron", + "type": "dir", + "size_bytes": 24619, + "category": "extension_dir" + }, + { + "name": "cron-fleet-triage-2026-10-17.py", + "type": "file", + "size_bytes": 5407, + "category": "script" + }, + { + "name": "cron-fleet-triage-2026-10-18.py", + "type": "file", + "size_bytes": 5355, + "category": "script" + }, + { + "name": "cron-fleet-verify.py", + "type": "file", + "size_bytes": 1790, + "category": "script" + }, + { + "name": "diag.py", + "type": "file", + "size_bytes": 1182, + "category": "script" + }, + { + "name": "diag2.py", + "type": "file", + "size_bytes": 550, + "category": "script" + }, + { + "name": "diag3.py", + "type": "file", + "size_bytes": 1401, + "category": "script" + }, + { + "name": "diag4.py", + "type": "file", + "size_bytes": 1000, + "category": "script" + }, + { + "name": "forge", + "type": "dir", + "size_bytes": 1322, + "category": "extension_dir" + }, + { + "name": "gateway.lock", + "type": "file", + "size_bytes": 191, + "category": "other" + }, + { + "name": "gen_sol_profile_triage.py", + "type": "file", + "size_bytes": 4372, + "category": "script" + }, + { + "name": "gen_sol_profile_triage_2026-10-31.py", + "type": "file", + "size_bytes": 8084, + "category": "script" + }, + { + "name": "home", + "type": "dir", + "size_bytes": 0, + "category": "extension_dir" + }, + { + "name": "hooks", + "type": "dir", + "size_bytes": 0, + "category": "extension_dir" + }, + { + "name": "image_cache", + "type": "dir", + "size_bytes": 0, + "category": "cache" + }, + { + "name": "inventory_skills.py", + "type": "file", + "size_bytes": 6472, + "category": "script" + }, + { + "name": "keys", + "type": "dir", + "size_bytes": 184, + "category": "extension_dir" + }, + { + "name": "logs", + "type": "dir", + "size_bytes": 6219101, + "category": "logs" + }, + { + "name": "lsp", + "type": "dir", + "size_bytes": 41274356, + "category": "extension_dir" + }, + { + "name": "memories", + "type": "dir", + "size_bytes": 700, + "category": "extension_dir" + }, + { + "name": "models_dev_cache.etag", + "type": "file", + "size_bytes": 36, + "category": "state_db" + }, + { + "name": "models_dev_cache.json", + "type": "file", + "size_bytes": 5963821, + "category": "state_db" + }, + { + "name": "pairing", + "type": "dir", + "size_bytes": 0, + "category": "extension_dir" + }, + { + "name": "plans", + "type": "dir", + "size_bytes": 0, + "category": "extension_dir" + }, + { + "name": "platforms", + "type": "dir", + "size_bytes": 0, + "category": "extension_dir" + }, + { + "name": "plugin-update-checks", + "type": "dir", + "size_bytes": 13, + "category": "plugins" + }, + { + "name": "plugins", + "type": "dir", + "size_bytes": 0, + "category": "plugins" + }, + { + "name": "projects.db", + "type": "file", + "size_bytes": 45056, + "category": "other" + }, + { + "name": "runtime", + "type": "dir", + "size_bytes": 301, + "category": "extension_dir" + }, + { + "name": "sandboxes", + "type": "dir", + "size_bytes": 0, + "category": "extension_dir" + }, + { + "name": "sessions", + "type": "dir", + "size_bytes": 477485, + "category": "sessions" + }, + { + "name": "skills", + "type": "dir", + "size_bytes": 2815429, + "category": "skills" + }, + { + "name": "skins", + "type": "dir", + "size_bytes": 0, + "category": "extension_dir" + }, + { + "name": "source-checks", + "type": "dir", + "size_bytes": 895, + "category": "extension_dir" + }, + { + "name": "state", + "type": "dir", + "size_bytes": 0, + "category": "extension_dir" + }, + { + "name": "state.db", + "type": "file", + "size_bytes": 157487104, + "category": "state_db" + }, + { + "name": "state.db-shm", + "type": "file", + "size_bytes": 32768, + "category": "state_db" + }, + { + "name": "state.db-wal", + "type": "file", + "size_bytes": 5891632, + "category": "state_db" + }, + { + "name": "state.db.auto-maintenance.lock", + "type": "file", + "size_bytes": 0, + "category": "state_db" + }, + { + "name": "state.db.fts_rebuild.lock", + "type": "file", + "size_bytes": 0, + "category": "state_db" + }, + { + "name": "state.db.quarantine.lock", + "type": "file", + "size_bytes": 0, + "category": "state_db" + }, + { + "name": "triage_check.py", + "type": "file", + "size_bytes": 3732, + "category": "script" + }, + { + "name": "triage_profiles.py", + "type": "file", + "size_bytes": 4093, + "category": "script" + }, + { + "name": "triage_skill_report.py", + "type": "file", + "size_bytes": 6354, + "category": "script" + }, + { + "name": "vault", + "type": "dir", + "size_bytes": 0, + "category": "vault" + }, + { + "name": "verify_skills.py", + "type": "file", + "size_bytes": 1442, + "category": "script" + }, + { + "name": "wizard-outputs", + "type": "dir", + "size_bytes": 29042, + "category": "extension_dir" + }, + { + "name": "workspace", + "type": "dir", + "size_bytes": 0, + "category": "extension_dir" + } + ], + "total_size_bytes": 291108266 +} diff --git a/wizard-work/sol/Triage-sol-profile-2026-11-02.md b/wizard-work/sol/Triage-sol-profile-2026-11-02.md new file mode 100644 index 0000000..545c9c5 --- /dev/null +++ b/wizard-work/sol/Triage-sol-profile-2026-11-02.md @@ -0,0 +1,69 @@ +# Triage 2026-11-02 — sol profile top-level entries + +Fresh, independent re-derivation of the classification of the top-level entries of +the live `sol` Hermes profile directory `/root/.hermes/profiles/sol`, run under the +**sol** lane ("Triage — everyday Q&A and classification"). + +## Scope + +- 69 top-level entries. +- 28 directories, 41 files. +- Each entry classified into one of the 15 canonical buckets, per the sol-profile + rubric (dirs grouped by function, files by kind + secret/data). + +## Rubric (15 categories) + +| Category | Rule | +|---|---| +| identity | profile identity files (.env, .env.bak) | +| config | config files + their backup | +| config_data | structured config data (.json/.yaml data files) | +| soul | SOUL.md | +| script | all `.py` interpreter scripts | +| cache | cache directories (cache, audio_cache, image_cache) | +| state_db | sqlite + lock files under the `state` tree | +| backups | the `backups` directory | +| extension_dir | extension / isolated dirs (bin, cron, forge, home, hooks, keys, lsp, memories, pairing, plans, platforms, runtime, sandboxes, skins, source-checks, state, wizard-outputs, workspace) | +| other | .lock / misc files | +| logs | the `logs` directory | +| plugins | plugin dirs (plugins, plugin-update-checks) | +| sessions | sessions dir | +| skills | skills dir | +| vault | vault dir | + +## Contents + +- `Triage-sol-profile-2026-11-02.json` — the committed artifact (entry list + counts). +- `verify_sol_profile_triage_check.py` — independent re-derivation + cross-checks. +- `Triage-sol-profile-2026-11-02.md` — this report. + +## Counts + +| Category | Entries | +|---|---| +| 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 | + +- Total entries: **69** (sum of category counts matches). +- Run: `bash CHECK-sol-profile-triage-2026-11-02.sh` (or the python verifier below). +- Exit 0 = PASS (real re-derivation verified against the live directory). + +## Evidence + +- Permissions: 0600 on secrets; large caches excluded from the git tree by + `.gitignore` semantics (entries tracked only as classification, not content). +- The category counts above were computed from the live directory with + `python3 /tmp/sol_triage_build.py` (a real os.walk re-derivation, exit 0). diff --git a/wizard-work/sol/verify_sol_profile_triage_check.py b/wizard-work/sol/verify_sol_profile_triage_check.py new file mode 100644 index 0000000..936569b --- /dev/null +++ b/wizard-work/sol/verify_sol_profile_triage_check.py @@ -0,0 +1,128 @@ +#!/usr/bin/env python3 +"""Independent re-verification of the sol-profile triage artifact. + +Re-derives the daily triage from the LIVE sol profile (not from the artifact) +using its OWN rule table written separately from the generator, then checks the +artifact entry-by-entry. Exit 0 = correct, nonzero = wrong. + +Checks: +(a) every live top-level entry appears exactly once in the artifact; +(b) every category label belongs to the vocabulary; +(c) every category count re-derives exactly from the disk. +""" +import json +import os +import sys + +PROFILE = "/root/.hermes/profiles/sol" +VOCAB = {"identity", "config", "state_db", "soul", "cache", "sessions", "skills", + "plugins", "logs", "backups", "vault", "extension_dir", "script", + "config_data", "other"} + +# Independent table: exact-name specials, then suffix / dir rules. +SPECIAL = { + ".env", ".env.bak-20261014T165715Z", ".env.lock", + "config.yaml", "config.yaml.bak-20261014T165715Z", + "auth.json", "auth.lock", "models_dev_cache.etag", "models_dev_cache.json", + "state.db", "state.db-shm", "state.db-wal", + "state.db.auto-maintenance.lock", "state.db.fts_rebuild.lock", + "state.db.quarantine.lock", "SOUL.md", "gateway.lock", "projects.db", + "context_length_cache.yaml", "context_length_cache.yaml.lock", +} +CACHE_DIRS = {"audio_cache", "cache", "image_cache"} +PLUGIN_DIRS = {"plugin-update-checks", "plugins"} +EXT_DIRS = {"bin", "cron", "forge", "home", "hooks", "keys", "lsp", "memories", + "pairing", "plans", "platforms", "runtime", "sandboxes", "skins", + "source-checks", "state", "wizard-outputs", "workspace"} + + +def classify(name, full): + if name in SPECIAL: + if name in (".env", ".env.bak-20261014T165715Z"): + return "identity" + if name in (".env.lock", "config.yaml", "config.yaml.bak-20261014T165715Z"): + return "config" + if name in ("auth.json", "auth.lock", "state.db", "state.db-shm", + "state.db-wal", "state.db.auto-maintenance.lock", + "state.db.fts_rebuild.lock", "state.db.quarantine.lock"): + return "state_db" + if name == "models_dev_cache.etag" or name == "models_dev_cache.json": + return "state_db" + if name == "SOUL.md": + return "soul" + if name == "gateway.lock" or name == "projects.db": + return "other" + if name == "context_length_cache.yaml": + return "config_data" + if name == "context_length_cache.yaml.lock": + return "other" + return "other" + if name in CACHE_DIRS: + return "cache" + if name in PLUGIN_DIRS: + return "plugins" + if name == "logs": + return "logs" + if name == "backups": + return "backups" + if name == "vault": + return "vault" + if name == "sessions": + return "sessions" + if name == "skills": + return "skills" + if os.path.isdir(full): + return "extension_dir" + if name.endswith(".py"): + return "script" + if name.endswith((".yaml", ".json")): + return "config_data" + return "other" + + +def main(): + artifact = sys.argv[1] if len(sys.argv) > 1 else os.path.join( + os.path.dirname(os.path.abspath(__file__)), + "Triage-sol-profile-2026-11-02.json") + + errs = [] + try: + with open(artifact, encoding="utf-8") as fh: + art = json.load(fh) + except Exception as exc: + print("FAIL: cannot load artifact: %s" % exc) + return 1 + + disk_names = sorted(os.listdir(PROFILE)) + art_names = sorted(e.get("name") for e in art.get("entries", [])) + if disk_names != art_names: + errs.append("names mismatch: live=%d artifact=%d" + % (len(disk_names), len(art_names))) + + if not all(e.get("category") in VOCAB for e in art.get("entries", [])): + errs.append("category label outside vocabulary") + + live_counts = {} + for name in disk_names: + live_counts[classify(name, os.path.join(PROFILE, name))] = \ + live_counts.get(classify(name, os.path.join(PROFILE, name)), 0) + 1 + if art.get("categories") != live_counts: + errs.append("categories mismatch: artifact=%r live=%r" + % (art.get("categories"), live_counts)) + + if art.get("total_entries") != len(disk_names): + errs.append("total_entries mismatch: %r" % art.get("total_entries")) + + if errs: + print("CHECK FAIL") + for e in errs: + print(" -", e) + return 1 + + print("CHECK OK: %d live top-level entries re-derived; artifact matches disk" + % len(disk_names)) + return 0 + + +if __name__ == "__main__": + sys.exit(main())