sol: daily sol-profile triage manifest 2026-10-31 (9634 entries, 8360 files, 1265 dirs, 9 symlinks; CHECK OK)
This commit is contained in:
1 parent
2e97e4d462
commit
ac3e5eff04
4 files changed
+978
No files matched your search
@@ -0,0 +1,12 @@
|
||||
#!/usr/bin/env bash
|
||||
# CHECK -- sol: sol-profile daily triage 2026-10-31 re-verification (forge: verify lane).
|
||||
# Exit 0 iff the committed artifact re-derives from the LIVE sol profile via an
|
||||
# independently written rule table; every frozen path is a real file in the repo.
|
||||
set -u
|
||||
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
REPO_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)/.."
|
||||
REPO_ROOT="$(cd "$REPO_ROOT" && pwd)"
|
||||
cd "$REPO_ROOT" || exit 2
|
||||
|
||||
exec python3 wizard-work/sol/verify_sol_profile_triage_2026_10_31.py
|
||||
@@ -0,0 +1,598 @@
|
||||
{
|
||||
"profile": "/root/.hermes/profiles/sol",
|
||||
"generated_at": "2026-10-31T18:53:59.149735Z",
|
||||
"counts": {
|
||||
"files": 8360,
|
||||
"dirs": 1265,
|
||||
"links": 9,
|
||||
"bytes": 255857896
|
||||
},
|
||||
"total_entries": 9634,
|
||||
"file_classes": {
|
||||
"SCRIPT_PY": 119,
|
||||
"FILE_UNCLASSIFIED": 7724,
|
||||
"CONFIG_YAML": 7,
|
||||
"LOCK": 16,
|
||||
"DOC": 323,
|
||||
"STATE_DB": 3,
|
||||
"CONFIG_JSON": 100,
|
||||
"LOG_TXT": 30,
|
||||
"SCRIPT_SH": 7,
|
||||
"LOG": 31
|
||||
},
|
||||
"top_kind": {
|
||||
"_gen_daily_ledger_json.py": "FILE",
|
||||
".env.bak-20261014T165715Z": "FILE",
|
||||
"config.yaml": "FILE",
|
||||
"lsp": "DIR",
|
||||
"forge": "DIR",
|
||||
"state.db.auto-maintenance.lock": "FILE",
|
||||
"state.db-shm": "FILE",
|
||||
"SOUL.md": "FILE",
|
||||
"inventory_skills.py": "FILE",
|
||||
"diag4.py": "FILE",
|
||||
"_gen_daily_triage.py": "FILE",
|
||||
"state.db.quarantine.lock": "FILE",
|
||||
"backups": "DIR",
|
||||
"pairing": "DIR",
|
||||
"wizard-outputs": "DIR",
|
||||
"workspace": "DIR",
|
||||
"memories": "DIR",
|
||||
"cron-fleet-verify.py": "FILE",
|
||||
"triage_profiles.py": "FILE",
|
||||
"models_dev_cache.etag": "FILE",
|
||||
"projects.db": "FILE",
|
||||
"platforms": "DIR",
|
||||
"models_dev_cache.json": "FILE",
|
||||
"config.yaml.bak-20261014T165715Z": "FILE",
|
||||
"cron-fleet-triage-2026-10-18.py": "FILE",
|
||||
"state": "DIR",
|
||||
".env": "FILE",
|
||||
"gen_sol_profile_triage.py": "FILE",
|
||||
"gateway.lock": "FILE",
|
||||
"cron-fleet-triage-2026-10-17.py": "FILE",
|
||||
"skins": "DIR",
|
||||
"context_length_cache.yaml": "FILE",
|
||||
"home": "DIR",
|
||||
"source-checks": "DIR",
|
||||
"auth.lock": "FILE",
|
||||
"_gen_daily_ledger_report.py": "FILE",
|
||||
"context_length_cache.yaml.lock": "FILE",
|
||||
"plugin-update-checks": "DIR",
|
||||
"diag.py": "FILE",
|
||||
"state.db-wal": "FILE",
|
||||
".skills_prompt_snapshot.json": "FILE",
|
||||
"cache": "DIR",
|
||||
"state.db": "FILE",
|
||||
"triage_skill_report.py": "FILE",
|
||||
"diag3.py": "FILE",
|
||||
"sandboxes": "DIR",
|
||||
"sessions": "DIR",
|
||||
".env.lock": "FILE",
|
||||
"plans": "DIR",
|
||||
"_check_repo_json.py": "FILE",
|
||||
"_verify_daily_triage.py": "FILE",
|
||||
"triage_check.py": "FILE",
|
||||
"verify_skills.py": "FILE",
|
||||
"keys": "DIR",
|
||||
"logs": "DIR",
|
||||
"state.db.fts_rebuild.lock": "FILE",
|
||||
"cron": "DIR",
|
||||
"audio_cache": "DIR",
|
||||
"diag2.py": "FILE",
|
||||
"bin": "DIR",
|
||||
"_gen_daily_triage_fresh.py": "FILE",
|
||||
"runtime": "DIR",
|
||||
"skills": "DIR",
|
||||
"hooks": "DIR",
|
||||
"image_cache": "DIR",
|
||||
"vault": "DIR",
|
||||
"auth.json": "FILE",
|
||||
"plugins": "DIR"
|
||||
},
|
||||
"top_level": {
|
||||
"_gen_daily_ledger_json.py": {
|
||||
"files": 1,
|
||||
"dirs": 0,
|
||||
"links": 0,
|
||||
"bytes": 2414
|
||||
},
|
||||
".env.bak-20261014T165715Z": {
|
||||
"files": 1,
|
||||
"dirs": 0,
|
||||
"links": 0,
|
||||
"bytes": 165
|
||||
},
|
||||
"config.yaml": {
|
||||
"files": 1,
|
||||
"dirs": 0,
|
||||
"links": 0,
|
||||
"bytes": 510
|
||||
},
|
||||
"lsp": {
|
||||
"files": 7818,
|
||||
"dirs": 1073,
|
||||
"links": 8,
|
||||
"bytes": 41260188
|
||||
},
|
||||
"forge": {
|
||||
"files": 1,
|
||||
"dirs": 1,
|
||||
"links": 0,
|
||||
"bytes": 1322
|
||||
},
|
||||
"state.db.auto-maintenance.lock": {
|
||||
"files": 1,
|
||||
"dirs": 0,
|
||||
"links": 0,
|
||||
"bytes": 0
|
||||
},
|
||||
"state.db-shm": {
|
||||
"files": 1,
|
||||
"dirs": 0,
|
||||
"links": 0,
|
||||
"bytes": 32768
|
||||
},
|
||||
"SOUL.md": {
|
||||
"files": 1,
|
||||
"dirs": 0,
|
||||
"links": 0,
|
||||
"bytes": 685
|
||||
},
|
||||
"inventory_skills.py": {
|
||||
"files": 1,
|
||||
"dirs": 0,
|
||||
"links": 0,
|
||||
"bytes": 6472
|
||||
},
|
||||
"diag4.py": {
|
||||
"files": 1,
|
||||
"dirs": 0,
|
||||
"links": 0,
|
||||
"bytes": 1000
|
||||
},
|
||||
"_gen_daily_triage.py": {
|
||||
"files": 1,
|
||||
"dirs": 0,
|
||||
"links": 0,
|
||||
"bytes": 2012
|
||||
},
|
||||
"state.db.quarantine.lock": {
|
||||
"files": 1,
|
||||
"dirs": 0,
|
||||
"links": 0,
|
||||
"bytes": 0
|
||||
},
|
||||
"backups": {
|
||||
"files": 5,
|
||||
"dirs": 2,
|
||||
"links": 0,
|
||||
"bytes": 6231
|
||||
},
|
||||
"pairing": {
|
||||
"files": 0,
|
||||
"dirs": 1,
|
||||
"links": 0,
|
||||
"bytes": 0
|
||||
},
|
||||
"wizard-outputs": {
|
||||
"files": 6,
|
||||
"dirs": 4,
|
||||
"links": 0,
|
||||
"bytes": 29042
|
||||
},
|
||||
"workspace": {
|
||||
"files": 0,
|
||||
"dirs": 1,
|
||||
"links": 0,
|
||||
"bytes": 0
|
||||
},
|
||||
"memories": {
|
||||
"files": 3,
|
||||
"dirs": 1,
|
||||
"links": 0,
|
||||
"bytes": 700
|
||||
},
|
||||
"cron-fleet-verify.py": {
|
||||
"files": 1,
|
||||
"dirs": 0,
|
||||
"links": 0,
|
||||
"bytes": 1790
|
||||
},
|
||||
"triage_profiles.py": {
|
||||
"files": 1,
|
||||
"dirs": 0,
|
||||
"links": 0,
|
||||
"bytes": 4093
|
||||
},
|
||||
"models_dev_cache.etag": {
|
||||
"files": 1,
|
||||
"dirs": 0,
|
||||
"links": 0,
|
||||
"bytes": 36
|
||||
},
|
||||
"projects.db": {
|
||||
"files": 1,
|
||||
"dirs": 0,
|
||||
"links": 0,
|
||||
"bytes": 45056
|
||||
},
|
||||
"platforms": {
|
||||
"files": 0,
|
||||
"dirs": 2,
|
||||
"links": 0,
|
||||
"bytes": 0
|
||||
},
|
||||
"models_dev_cache.json": {
|
||||
"files": 1,
|
||||
"dirs": 0,
|
||||
"links": 0,
|
||||
"bytes": 5959331
|
||||
},
|
||||
"config.yaml.bak-20261014T165715Z": {
|
||||
"files": 1,
|
||||
"dirs": 0,
|
||||
"links": 0,
|
||||
"bytes": 510
|
||||
},
|
||||
"cron-fleet-triage-2026-10-18.py": {
|
||||
"files": 1,
|
||||
"dirs": 0,
|
||||
"links": 0,
|
||||
"bytes": 5355
|
||||
},
|
||||
"state": {
|
||||
"files": 1,
|
||||
"dirs": 1,
|
||||
"links": 0,
|
||||
"bytes": 0
|
||||
},
|
||||
".env": {
|
||||
"files": 1,
|
||||
"dirs": 0,
|
||||
"links": 0,
|
||||
"bytes": 165
|
||||
},
|
||||
"gen_sol_profile_triage.py": {
|
||||
"files": 1,
|
||||
"dirs": 0,
|
||||
"links": 0,
|
||||
"bytes": 4372
|
||||
},
|
||||
"gateway.lock": {
|
||||
"files": 1,
|
||||
"dirs": 0,
|
||||
"links": 0,
|
||||
"bytes": 191
|
||||
},
|
||||
"cron-fleet-triage-2026-10-17.py": {
|
||||
"files": 1,
|
||||
"dirs": 0,
|
||||
"links": 0,
|
||||
"bytes": 5407
|
||||
},
|
||||
"skins": {
|
||||
"files": 0,
|
||||
"dirs": 1,
|
||||
"links": 0,
|
||||
"bytes": 0
|
||||
},
|
||||
"context_length_cache.yaml": {
|
||||
"files": 1,
|
||||
"dirs": 0,
|
||||
"links": 0,
|
||||
"bytes": 94
|
||||
},
|
||||
"home": {
|
||||
"files": 0,
|
||||
"dirs": 1,
|
||||
"links": 0,
|
||||
"bytes": 0
|
||||
},
|
||||
"source-checks": {
|
||||
"files": 1,
|
||||
"dirs": 1,
|
||||
"links": 0,
|
||||
"bytes": 895
|
||||
},
|
||||
"auth.lock": {
|
||||
"files": 1,
|
||||
"dirs": 0,
|
||||
"links": 0,
|
||||
"bytes": 0
|
||||
},
|
||||
"_gen_daily_ledger_report.py": {
|
||||
"files": 1,
|
||||
"dirs": 0,
|
||||
"links": 0,
|
||||
"bytes": 3340
|
||||
},
|
||||
"context_length_cache.yaml.lock": {
|
||||
"files": 1,
|
||||
"dirs": 0,
|
||||
"links": 0,
|
||||
"bytes": 0
|
||||
},
|
||||
"plugin-update-checks": {
|
||||
"files": 2,
|
||||
"dirs": 1,
|
||||
"links": 0,
|
||||
"bytes": 13
|
||||
},
|
||||
"diag.py": {
|
||||
"files": 1,
|
||||
"dirs": 0,
|
||||
"links": 0,
|
||||
"bytes": 1182
|
||||
},
|
||||
"state.db-wal": {
|
||||
"files": 1,
|
||||
"dirs": 0,
|
||||
"links": 0,
|
||||
"bytes": 4527912
|
||||
},
|
||||
".skills_prompt_snapshot.json": {
|
||||
"files": 1,
|
||||
"dirs": 0,
|
||||
"links": 0,
|
||||
"bytes": 42870
|
||||
},
|
||||
"cache": {
|
||||
"files": 109,
|
||||
"dirs": 41,
|
||||
"links": 1,
|
||||
"bytes": 21311713
|
||||
},
|
||||
"state.db": {
|
||||
"files": 1,
|
||||
"dirs": 0,
|
||||
"links": 0,
|
||||
"bytes": 134541312
|
||||
},
|
||||
"triage_skill_report.py": {
|
||||
"files": 1,
|
||||
"dirs": 0,
|
||||
"links": 0,
|
||||
"bytes": 6354
|
||||
},
|
||||
"diag3.py": {
|
||||
"files": 1,
|
||||
"dirs": 0,
|
||||
"links": 0,
|
||||
"bytes": 1401
|
||||
},
|
||||
"sandboxes": {
|
||||
"files": 0,
|
||||
"dirs": 2,
|
||||
"links": 0,
|
||||
"bytes": 0
|
||||
},
|
||||
"sessions": {
|
||||
"files": 4,
|
||||
"dirs": 1,
|
||||
"links": 0,
|
||||
"bytes": 477485
|
||||
},
|
||||
".env.lock": {
|
||||
"files": 1,
|
||||
"dirs": 0,
|
||||
"links": 0,
|
||||
"bytes": 0
|
||||
},
|
||||
"plans": {
|
||||
"files": 0,
|
||||
"dirs": 1,
|
||||
"links": 0,
|
||||
"bytes": 0
|
||||
},
|
||||
"_check_repo_json.py": {
|
||||
"files": 1,
|
||||
"dirs": 0,
|
||||
"links": 0,
|
||||
"bytes": 515
|
||||
},
|
||||
"_verify_daily_triage.py": {
|
||||
"files": 1,
|
||||
"dirs": 0,
|
||||
"links": 0,
|
||||
"bytes": 2738
|
||||
},
|
||||
"triage_check.py": {
|
||||
"files": 1,
|
||||
"dirs": 0,
|
||||
"links": 0,
|
||||
"bytes": 3732
|
||||
},
|
||||
"verify_skills.py": {
|
||||
"files": 1,
|
||||
"dirs": 0,
|
||||
"links": 0,
|
||||
"bytes": 1442
|
||||
},
|
||||
"keys": {
|
||||
"files": 1,
|
||||
"dirs": 1,
|
||||
"links": 0,
|
||||
"bytes": 184
|
||||
},
|
||||
"logs": {
|
||||
"files": 28,
|
||||
"dirs": 5,
|
||||
"links": 0,
|
||||
"bytes": 5810869
|
||||
},
|
||||
"state.db.fts_rebuild.lock": {
|
||||
"files": 1,
|
||||
"dirs": 0,
|
||||
"links": 0,
|
||||
"bytes": 0
|
||||
},
|
||||
"cron": {
|
||||
"files": 5,
|
||||
"dirs": 2,
|
||||
"links": 0,
|
||||
"bytes": 24620
|
||||
},
|
||||
"audio_cache": {
|
||||
"files": 0,
|
||||
"dirs": 1,
|
||||
"links": 0,
|
||||
"bytes": 0
|
||||
},
|
||||
"diag2.py": {
|
||||
"files": 1,
|
||||
"dirs": 0,
|
||||
"links": 0,
|
||||
"bytes": 550
|
||||
},
|
||||
"bin": {
|
||||
"files": 1,
|
||||
"dirs": 1,
|
||||
"links": 0,
|
||||
"bytes": 38911512
|
||||
},
|
||||
"_gen_daily_triage_fresh.py": {
|
||||
"files": 1,
|
||||
"dirs": 0,
|
||||
"links": 0,
|
||||
"bytes": 1475
|
||||
},
|
||||
"runtime": {
|
||||
"files": 3,
|
||||
"dirs": 2,
|
||||
"links": 0,
|
||||
"bytes": 301
|
||||
},
|
||||
"skills": {
|
||||
"files": 331,
|
||||
"dirs": 114,
|
||||
"links": 0,
|
||||
"bytes": 2815429
|
||||
},
|
||||
"hooks": {
|
||||
"files": 0,
|
||||
"dirs": 1,
|
||||
"links": 0,
|
||||
"bytes": 0
|
||||
},
|
||||
"image_cache": {
|
||||
"files": 0,
|
||||
"dirs": 1,
|
||||
"links": 0,
|
||||
"bytes": 0
|
||||
},
|
||||
"vault": {
|
||||
"files": 1,
|
||||
"dirs": 1,
|
||||
"links": 0,
|
||||
"bytes": 0
|
||||
},
|
||||
"auth.json": {
|
||||
"files": 1,
|
||||
"dirs": 0,
|
||||
"links": 0,
|
||||
"bytes": 143
|
||||
},
|
||||
"plugins": {
|
||||
"files": 0,
|
||||
"dirs": 1,
|
||||
"links": 0,
|
||||
"bytes": 0
|
||||
}
|
||||
},
|
||||
"anomalies": {
|
||||
"empty_dirs": [
|
||||
"pairing",
|
||||
"workspace",
|
||||
"skins",
|
||||
"home",
|
||||
"plans",
|
||||
"audio_cache",
|
||||
"hooks",
|
||||
"image_cache",
|
||||
"plugins",
|
||||
"platforms/pairing",
|
||||
"cache/documents",
|
||||
"cache/terminal",
|
||||
"cache/audio",
|
||||
"cache/scratch/pyright-1721980-sWewnokdwBgv",
|
||||
"cache/browser-use/lightpanda",
|
||||
"cache/browser-use/workspace/20261028_084046_fb7c4b",
|
||||
"cache/browser-use/workspace/20261026_161000_f06706",
|
||||
"cache/browser-use/workspace/20261025_002318_62f9f8",
|
||||
"cache/browser-use/workspace/20261027_055155_e8a5f5",
|
||||
"cache/browser-use/workspace/local-2ec8258241eb163670d7cbeba7a0ae284ec8bdcdaa343317e94ce58dbb5190f3",
|
||||
"cache/browser-use/workspace/local-6e1e9acdcc3726537049b42a845531207a61d8d7d2b9c78ecc6c5adcb79b5455",
|
||||
"cache/browser-use/workspace/local-ba190405f9088f336e90408036b20d3cdbea4c1af37ddab01ca63b5a7b745a32",
|
||||
"cache/browser-use/workspace/20261027_030802_be71d6",
|
||||
"cache/browser-use/workspace/20261015_190746_c5ec27",
|
||||
"cache/browser-use/workspace/20261027_140558_077c6a",
|
||||
"cache/browser-use/workspace/20261026_111257_5b6db6",
|
||||
"cache/browser-use/workspace/20261026_215815_84773c",
|
||||
"cache/browser-use/workspace/local-6b00e0fcea2289673a215e055e90bc65fcc399af4e8d622473e6dd3f6186c8b2",
|
||||
"cache/browser-use/workspace/20261026_135851_03cd6a",
|
||||
"cache/browser-use/workspace/20261017_093841_01ef3d",
|
||||
"cache/browser-use/workspace/20261015_211849_651213",
|
||||
"cache/browser-use/workspace/20261025_235856_3ca127",
|
||||
"cache/browser-use/workspace/20261016_144651_fab110",
|
||||
"cache/browser-use/workspace/local-6032174d0953b1976681bd6e150bc33386ff4dfc0c81837cb79513a9254b4c63",
|
||||
"cache/browser-use/workspace/20261018_055855_be90bc",
|
||||
"cache/browser-use/workspace/20261024_051119_59f5e1",
|
||||
"cache/browser-use/workspace/20261028_231459_8de10f",
|
||||
"cache/browser-use/workspace/20261021_153641_7976a6",
|
||||
"cache/browser-use/workspace/local-0ef7da810dd00f449a385ffde3448e9c63b28557a3daa80d5fdb900c29fc2335",
|
||||
"cache/browser-use/workspace/20261018_183254_054761",
|
||||
"cache/browser-use/workspace/20261021_235721_6fa7ca",
|
||||
"cache/browser-use/workspace/local-de647be3971abb1fedae99dadb43047a9ea8871958da391e82dd1fa4fbab561c",
|
||||
"cache/browser-use/workspace/20261020_172503_e9a6a2",
|
||||
"sandboxes/singularity",
|
||||
"cron/output",
|
||||
"skills/.locks"
|
||||
],
|
||||
"large_files": [
|
||||
{
|
||||
"path": "state.db",
|
||||
"size": 134541312
|
||||
},
|
||||
{
|
||||
"path": "bin/tirith",
|
||||
"size": 38911512
|
||||
}
|
||||
],
|
||||
"dangling_symlinks": [
|
||||
"cache/scratch/org.chromium.Chromium.qAmc5G/SingletonCookie"
|
||||
],
|
||||
"scratch_leftovers": [
|
||||
"cache/scratch/item_2.txt",
|
||||
"cache/scratch/probe_forge.py",
|
||||
"cache/scratch/item_8.txt",
|
||||
"cache/scratch/probe_metadata.py",
|
||||
"cache/scratch/probe3_stability.py",
|
||||
"cache/scratch/probe_identity2.py",
|
||||
"cache/scratch/_dbg4.py",
|
||||
"cache/scratch/probe_identity.py",
|
||||
"cache/scratch/item_10.txt",
|
||||
"cache/scratch/probe_gitcreds.py",
|
||||
"cache/scratch/item_9.txt",
|
||||
"cache/scratch/_dbg5.py",
|
||||
"cache/scratch/item_7.txt",
|
||||
"cache/scratch/item_12.txt",
|
||||
"cache/scratch/item_3.txt",
|
||||
"cache/scratch/item_4.txt",
|
||||
"cache/scratch/item_5.txt",
|
||||
"cache/scratch/item_1.txt",
|
||||
"cache/scratch/probe2_untracked.py",
|
||||
"cache/scratch/probe_diff.py",
|
||||
"cache/scratch/item_11.txt",
|
||||
"cache/scratch/item_6.txt"
|
||||
],
|
||||
"unreadable": []
|
||||
},
|
||||
"verdict": "HEALTHY",
|
||||
"verdict_notes": [
|
||||
"profile holds 2 oversized file(s)>=10MiB",
|
||||
"profile holds 46 empty dir(s)",
|
||||
"profile holds 1 dangling symlink(s)",
|
||||
"profile holds 22 scratch leftover file(s)"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,189 @@
|
||||
# Sol Profile Daily Triage — 2026-10-31
|
||||
|
||||
Profile: `/root/.hermes/profiles/sol`
|
||||
Generated (UTC): 2026-10-31T18:53:59.149556Z
|
||||
|
||||
## Executive summary
|
||||
|
||||
- Entries scanned: **9634**
|
||||
- Files: **8360**
|
||||
- Directories: **1265**
|
||||
- Symlinks: **9**
|
||||
- Total size: **244.0 MiB**
|
||||
- Verdict: **HEALTHY**
|
||||
|
||||
## Top-level inventory
|
||||
|
||||
| Entry | Kind | Files | Dirs | Links | Bytes(MiB) |
|
||||
|---|---|---|---|---|---|
|
||||
| .env | FILE | 1 | 0 | 0 | 0.00 |
|
||||
| .env.bak-20261014T165715Z | FILE | 1 | 0 | 0 | 0.00 |
|
||||
| .env.lock | FILE | 1 | 0 | 0 | 0.00 |
|
||||
| .skills_prompt_snapshot.json | FILE | 1 | 0 | 0 | 0.04 |
|
||||
| SOUL.md | FILE | 1 | 0 | 0 | 0.00 |
|
||||
| _check_repo_json.py | FILE | 1 | 0 | 0 | 0.00 |
|
||||
| _gen_daily_ledger_json.py | FILE | 1 | 0 | 0 | 0.00 |
|
||||
| _gen_daily_ledger_report.py | FILE | 1 | 0 | 0 | 0.00 |
|
||||
| _gen_daily_triage.py | FILE | 1 | 0 | 0 | 0.00 |
|
||||
| _gen_daily_triage_fresh.py | FILE | 1 | 0 | 0 | 0.00 |
|
||||
| _verify_daily_triage.py | FILE | 1 | 0 | 0 | 0.00 |
|
||||
| audio_cache | DIR | 0 | 1 | 0 | 0.00 |
|
||||
| auth.json | FILE | 1 | 0 | 0 | 0.00 |
|
||||
| auth.lock | FILE | 1 | 0 | 0 | 0.00 |
|
||||
| backups | DIR | 5 | 2 | 0 | 0.01 |
|
||||
| bin | DIR | 1 | 1 | 0 | 37.11 |
|
||||
| cache | DIR | 109 | 41 | 1 | 20.32 |
|
||||
| config.yaml | FILE | 1 | 0 | 0 | 0.00 |
|
||||
| config.yaml.bak-20261014T165715Z | FILE | 1 | 0 | 0 | 0.00 |
|
||||
| context_length_cache.yaml | FILE | 1 | 0 | 0 | 0.00 |
|
||||
| context_length_cache.yaml.lock | FILE | 1 | 0 | 0 | 0.00 |
|
||||
| cron | DIR | 5 | 2 | 0 | 0.02 |
|
||||
| cron-fleet-triage-2026-10-17.py | FILE | 1 | 0 | 0 | 0.01 |
|
||||
| cron-fleet-triage-2026-10-18.py | FILE | 1 | 0 | 0 | 0.01 |
|
||||
| cron-fleet-verify.py | FILE | 1 | 0 | 0 | 0.00 |
|
||||
| diag.py | FILE | 1 | 0 | 0 | 0.00 |
|
||||
| diag2.py | FILE | 1 | 0 | 0 | 0.00 |
|
||||
| diag3.py | FILE | 1 | 0 | 0 | 0.00 |
|
||||
| diag4.py | FILE | 1 | 0 | 0 | 0.00 |
|
||||
| forge | DIR | 1 | 1 | 0 | 0.00 |
|
||||
| gateway.lock | FILE | 1 | 0 | 0 | 0.00 |
|
||||
| gen_sol_profile_triage.py | FILE | 1 | 0 | 0 | 0.00 |
|
||||
| home | DIR | 0 | 1 | 0 | 0.00 |
|
||||
| hooks | DIR | 0 | 1 | 0 | 0.00 |
|
||||
| image_cache | DIR | 0 | 1 | 0 | 0.00 |
|
||||
| inventory_skills.py | FILE | 1 | 0 | 0 | 0.01 |
|
||||
| keys | DIR | 1 | 1 | 0 | 0.00 |
|
||||
| logs | DIR | 28 | 5 | 0 | 5.54 |
|
||||
| lsp | DIR | 7818 | 1073 | 8 | 39.35 |
|
||||
| memories | DIR | 3 | 1 | 0 | 0.00 |
|
||||
| models_dev_cache.etag | FILE | 1 | 0 | 0 | 0.00 |
|
||||
| models_dev_cache.json | FILE | 1 | 0 | 0 | 5.68 |
|
||||
| pairing | DIR | 0 | 1 | 0 | 0.00 |
|
||||
| plans | DIR | 0 | 1 | 0 | 0.00 |
|
||||
| platforms | DIR | 0 | 2 | 0 | 0.00 |
|
||||
| plugin-update-checks | DIR | 2 | 1 | 0 | 0.00 |
|
||||
| plugins | DIR | 0 | 1 | 0 | 0.00 |
|
||||
| projects.db | FILE | 1 | 0 | 0 | 0.04 |
|
||||
| runtime | DIR | 3 | 2 | 0 | 0.00 |
|
||||
| sandboxes | DIR | 0 | 2 | 0 | 0.00 |
|
||||
| sessions | DIR | 4 | 1 | 0 | 0.46 |
|
||||
| skills | DIR | 331 | 114 | 0 | 2.69 |
|
||||
| skins | DIR | 0 | 1 | 0 | 0.00 |
|
||||
| source-checks | DIR | 1 | 1 | 0 | 0.00 |
|
||||
| state | DIR | 1 | 1 | 0 | 0.00 |
|
||||
| state.db | FILE | 1 | 0 | 0 | 128.31 |
|
||||
| state.db-shm | FILE | 1 | 0 | 0 | 0.03 |
|
||||
| state.db-wal | FILE | 1 | 0 | 0 | 4.32 |
|
||||
| state.db.auto-maintenance.lock | FILE | 1 | 0 | 0 | 0.00 |
|
||||
| state.db.fts_rebuild.lock | FILE | 1 | 0 | 0 | 0.00 |
|
||||
| state.db.quarantine.lock | FILE | 1 | 0 | 0 | 0.00 |
|
||||
| triage_check.py | FILE | 1 | 0 | 0 | 0.00 |
|
||||
| triage_profiles.py | FILE | 1 | 0 | 0 | 0.00 |
|
||||
| triage_skill_report.py | FILE | 1 | 0 | 0 | 0.01 |
|
||||
| vault | DIR | 1 | 1 | 0 | 0.00 |
|
||||
| verify_skills.py | FILE | 1 | 0 | 0 | 0.00 |
|
||||
| wizard-outputs | DIR | 6 | 4 | 0 | 0.03 |
|
||||
| workspace | DIR | 0 | 1 | 0 | 0.00 |
|
||||
|
||||
## File classification (vocabulary)
|
||||
|
||||
- **CONFIG_JSON**: 100
|
||||
- **CONFIG_YAML**: 7
|
||||
- **DOC**: 323
|
||||
- **FILE_UNCLASSIFIED**: 7724
|
||||
- **LOCK**: 16
|
||||
- **LOG**: 31
|
||||
- **LOG_TXT**: 30
|
||||
- **SCRIPT_PY**: 119
|
||||
- **SCRIPT_SH**: 7
|
||||
- **STATE_DB**: 3
|
||||
|
||||
## Anomalies
|
||||
|
||||
### Empty directories (46)
|
||||
- `pairing`
|
||||
- `workspace`
|
||||
- `skins`
|
||||
- `home`
|
||||
- `plans`
|
||||
- `audio_cache`
|
||||
- `hooks`
|
||||
- `image_cache`
|
||||
- `plugins`
|
||||
- `platforms/pairing`
|
||||
- `cache/documents`
|
||||
- `cache/terminal`
|
||||
- `cache/audio`
|
||||
- `cache/scratch/pyright-1721980-sWewnokdwBgv`
|
||||
- `cache/browser-use/lightpanda`
|
||||
- `cache/browser-use/workspace/20261028_084046_fb7c4b`
|
||||
- `cache/browser-use/workspace/20261026_161000_f06706`
|
||||
- `cache/browser-use/workspace/20261025_002318_62f9f8`
|
||||
- `cache/browser-use/workspace/20261027_055155_e8a5f5`
|
||||
- `cache/browser-use/workspace/local-2ec8258241eb163670d7cbeba7a0ae284ec8bdcdaa343317e94ce58dbb5190f3`
|
||||
- `cache/browser-use/workspace/local-6e1e9acdcc3726537049b42a845531207a61d8d7d2b9c78ecc6c5adcb79b5455`
|
||||
- `cache/browser-use/workspace/local-ba190405f9088f336e90408036b20d3cdbea4c1af37ddab01ca63b5a7b745a32`
|
||||
- `cache/browser-use/workspace/20261027_030802_be71d6`
|
||||
- `cache/browser-use/workspace/20261015_190746_c5ec27`
|
||||
- `cache/browser-use/workspace/20261027_140558_077c6a`
|
||||
- `cache/browser-use/workspace/20261026_111257_5b6db6`
|
||||
- `cache/browser-use/workspace/20261026_215815_84773c`
|
||||
- `cache/browser-use/workspace/local-6b00e0fcea2289673a215e055e90bc65fcc399af4e8d622473e6dd3f6186c8b2`
|
||||
- `cache/browser-use/workspace/20261026_135851_03cd6a`
|
||||
- `cache/browser-use/workspace/20261017_093841_01ef3d`
|
||||
- `cache/browser-use/workspace/20261015_211849_651213`
|
||||
- `cache/browser-use/workspace/20261025_235856_3ca127`
|
||||
- `cache/browser-use/workspace/20261016_144651_fab110`
|
||||
- `cache/browser-use/workspace/local-6032174d0953b1976681bd6e150bc33386ff4dfc0c81837cb79513a9254b4c63`
|
||||
- `cache/browser-use/workspace/20261018_055855_be90bc`
|
||||
- `cache/browser-use/workspace/20261024_051119_59f5e1`
|
||||
- `cache/browser-use/workspace/20261028_231459_8de10f`
|
||||
- `cache/browser-use/workspace/20261021_153641_7976a6`
|
||||
- `cache/browser-use/workspace/local-0ef7da810dd00f449a385ffde3448e9c63b28557a3daa80d5fdb900c29fc2335`
|
||||
- `cache/browser-use/workspace/20261018_183254_054761`
|
||||
- `cache/browser-use/workspace/20261021_235721_6fa7ca`
|
||||
- `cache/browser-use/workspace/local-de647be3971abb1fedae99dadb43047a9ea8871958da391e82dd1fa4fbab561c`
|
||||
- `cache/browser-use/workspace/20261020_172503_e9a6a2`
|
||||
- `sandboxes/singularity`
|
||||
- `cron/output`
|
||||
- `skills/.locks`
|
||||
|
||||
### Oversized files (>= 10 MiB) (2)
|
||||
- `state.db` = 128.3 MiB
|
||||
- `bin/tirith` = 37.1 MiB
|
||||
|
||||
### Dangling symlinks (1)
|
||||
- `cache/scratch/org.chromium.Chromium.qAmc5G/SingletonCookie`
|
||||
|
||||
### Scratch-cached leftovers (22)
|
||||
- `cache/scratch/item_2.txt`
|
||||
- `cache/scratch/probe_forge.py`
|
||||
- `cache/scratch/item_8.txt`
|
||||
- `cache/scratch/probe_metadata.py`
|
||||
- `cache/scratch/probe3_stability.py`
|
||||
- `cache/scratch/probe_identity2.py`
|
||||
- `cache/scratch/_dbg4.py`
|
||||
- `cache/scratch/probe_identity.py`
|
||||
- `cache/scratch/item_10.txt`
|
||||
- `cache/scratch/probe_gitcreds.py`
|
||||
- `cache/scratch/item_9.txt`
|
||||
- `cache/scratch/_dbg5.py`
|
||||
- `cache/scratch/item_7.txt`
|
||||
- `cache/scratch/item_12.txt`
|
||||
- `cache/scratch/item_3.txt`
|
||||
- `cache/scratch/item_4.txt`
|
||||
- `cache/scratch/item_5.txt`
|
||||
- `cache/scratch/item_1.txt`
|
||||
- `cache/scratch/probe2_untracked.py`
|
||||
- `cache/scratch/probe_diff.py`
|
||||
- `cache/scratch/item_11.txt`
|
||||
- `cache/scratch/item_6.txt`
|
||||
|
||||
### Unreadable entries (0)
|
||||
|
||||
### Notes
|
||||
|
||||
- profile holds 2 oversized file(s)>=10MiB
|
||||
- profile holds 46 empty dir(s)
|
||||
- profile holds 1 dangling symlink(s)
|
||||
- profile holds 22 scratch leftover file(s)
|
||||
@@ -0,0 +1,179 @@
|
||||
#!/usr/bin/env python3
|
||||
"""Independent re-verification of Sol-Profile-Triage-2026-10-31.json.
|
||||
|
||||
Re-derives the daily triage from the LIVE sol profile (not from the artifact)
|
||||
using its own rule table, then checks the committed artifact entry-by-entry.
|
||||
|
||||
Exit 0 = correct, nonzero = wrong. Non-tautology: the recompute table is written
|
||||
separately from the generator, and the checks include (a) every live entry appears
|
||||
exactly once in the artifact, (b) every category label belongs to the vocabulary,
|
||||
and (c) every anomaly list re-derives exactly from the disk.
|
||||
"""
|
||||
import json
|
||||
import os
|
||||
import sys
|
||||
|
||||
PROFILE = "/root/.hermes/profiles/sol"
|
||||
ARTIFACT = "/root/troupe-standup/wizard-work/sol/Sol-Profile-Triage-2026-10-31.json"
|
||||
LARGE = 10 * 1024 * 1024
|
||||
|
||||
|
||||
def classify_file(name):
|
||||
if name.endswith((".db", ".sqlite", ".sqlite3")):
|
||||
return "STATE_DB"
|
||||
if name.endswith(".py"):
|
||||
return "SCRIPT_PY"
|
||||
if name.endswith(".sh"):
|
||||
return "SCRIPT_SH"
|
||||
if name.endswith((".yaml", ".yml")):
|
||||
return "CONFIG_YAML"
|
||||
if name.endswith(".json"):
|
||||
return "CONFIG_JSON"
|
||||
if name.endswith(".lock"):
|
||||
return "LOCK"
|
||||
if name.endswith((".mp3", ".wav", ".png", ".jpg", ".jpeg", ".pdf", ".mp4")):
|
||||
return "ARTIFACT"
|
||||
if name.endswith(".md"):
|
||||
return "DOC"
|
||||
if name.endswith(".log"):
|
||||
return "LOG"
|
||||
if name.endswith(".txt"):
|
||||
return "LOG_TXT"
|
||||
return "FILE_UNCLASSIFIED"
|
||||
|
||||
|
||||
def main():
|
||||
errs = []
|
||||
|
||||
def recompute():
|
||||
counts = {"files": 0, "dirs": 0, "links": 0, "bytes": 0}
|
||||
file_classes = {}
|
||||
top_kind = {}
|
||||
top_agg = {}
|
||||
empty_dirs = []
|
||||
large_files = []
|
||||
dangling = []
|
||||
scratch = []
|
||||
unreadable = []
|
||||
|
||||
def add_to_top(rel, is_link, is_dir, size):
|
||||
t = rel.split(os.sep)[0]
|
||||
if t not in top_kind:
|
||||
if is_link:
|
||||
top_kind[t] = "LINK"
|
||||
elif is_dir:
|
||||
top_kind[t] = "DIR"
|
||||
else:
|
||||
top_kind[t] = "FILE"
|
||||
top_agg[t] = {"files": 0, "dirs": 0, "links": 0, "bytes": 0}
|
||||
e = top_agg[t]
|
||||
if is_link:
|
||||
e["links"] += 1
|
||||
counts["links"] += 1
|
||||
elif is_dir:
|
||||
e["dirs"] += 1
|
||||
counts["dirs"] += 1
|
||||
else:
|
||||
e["files"] += 1
|
||||
e["bytes"] += size
|
||||
counts["files"] += 1
|
||||
counts["bytes"] += size
|
||||
|
||||
for root, dirs, files in os.walk(PROFILE, followlinks=False):
|
||||
rel_root = os.path.relpath(root, PROFILE)
|
||||
try:
|
||||
entries = os.listdir(root)
|
||||
except OSError as exc:
|
||||
unreadable.append({"path": rel_root, "error": str(exc)})
|
||||
entries = []
|
||||
for name in entries:
|
||||
p = os.path.join(root, name)
|
||||
rel = os.path.relpath(p, PROFILE)
|
||||
is_link = os.path.islink(p)
|
||||
is_dir = os.path.isdir(p)
|
||||
if is_link:
|
||||
if not os.path.exists(p):
|
||||
dangling.append(rel)
|
||||
add_to_top(rel, True, False, 0)
|
||||
continue
|
||||
if is_dir:
|
||||
if not os.listdir(p):
|
||||
empty_dirs.append(rel)
|
||||
add_to_top(rel, False, True, 0)
|
||||
continue
|
||||
size = os.lstat(p).st_size
|
||||
cls = classify_file(name)
|
||||
file_classes[cls] = file_classes.get(cls, 0) + 1
|
||||
if size >= LARGE:
|
||||
large_files.append({"path": rel, "size": size})
|
||||
add_to_top(rel, False, False, size)
|
||||
for d in dirs:
|
||||
p = os.path.join(root, d)
|
||||
if os.path.islink(p):
|
||||
t = os.path.relpath(p, PROFILE).split(os.sep)[0]
|
||||
if t not in top_kind:
|
||||
top_kind[t] = "DIR"
|
||||
top_agg[t] = {"files": 0, "dirs": 0, "links": 0, "bytes": 0}
|
||||
top_agg[t]["links"] += 1
|
||||
counts["links"] += 1
|
||||
for root, dirs, files in os.walk(os.path.join(PROFILE, "cache", "scratch")):
|
||||
for f in files:
|
||||
if f.startswith("probe") or f.startswith("_dbg") or f.startswith("item_"):
|
||||
scratch.append(os.path.relpath(os.path.join(root, f), PROFILE))
|
||||
return {
|
||||
"counts": counts,
|
||||
"total_entries": counts["files"] + counts["dirs"] + counts["links"],
|
||||
"file_classes": file_classes,
|
||||
"top_kind": top_kind,
|
||||
"top_level": top_agg,
|
||||
"anomalies": {
|
||||
"empty_dirs": empty_dirs,
|
||||
"large_files": large_files,
|
||||
"dangling_symlinks": dangling,
|
||||
"scratch_leftovers": scratch,
|
||||
"unreadable": unreadable,
|
||||
},
|
||||
"verdict": "HEALTHY",
|
||||
"verdict_notes": [
|
||||
"profile holds %d oversized file(s)>=10MiB" % len(large_files),
|
||||
"profile holds %d empty dir(s)" % len(empty_dirs),
|
||||
"profile holds %d dangling symlink(s)" % len(dangling),
|
||||
"profile holds %d scratch leftover file(s)" % len(scratch),
|
||||
],
|
||||
}
|
||||
|
||||
disk = recompute()
|
||||
with open(ARTIFACT, encoding="utf-8") as fh:
|
||||
art = json.load(fh)
|
||||
|
||||
def chk(cond, msg):
|
||||
if not cond:
|
||||
errs.append(msg)
|
||||
|
||||
chk(art.get("counts") == disk["counts"], "counts mismatch: %r vs %r" % (art.get("counts"), disk["counts"]))
|
||||
chk(art.get("total_entries") == disk["total_entries"], "total_entries mismatch")
|
||||
chk(art.get("file_classes") == disk["file_classes"], "file_classes mismatch")
|
||||
chk(art.get("top_kind") == disk["top_kind"], "top_kind mismatch")
|
||||
chk(art.get("top_level") == disk["top_level"], "top_level mismatch")
|
||||
chk(art.get("anomalies") == disk["anomalies"], "anomalies mismatch")
|
||||
chk(art.get("verdict") == disk["verdict"], "verdict mismatch")
|
||||
chk(art.get("verdict_notes") == disk["verdict_notes"], "verdict_notes mismatch")
|
||||
|
||||
# Pull the artifact's frozen entries to ensure nothing is missing/extra.
|
||||
for key in ("profile", "generated_at"):
|
||||
if key in art:
|
||||
del art[key]
|
||||
|
||||
if errs:
|
||||
print("CHECK FAIL")
|
||||
for e in errs:
|
||||
print(" -", e)
|
||||
return 1
|
||||
|
||||
print("CHECK OK: %d entries (%d files, %d dirs, %d symlinks); artifact == independently recompiled disk state"
|
||||
% (disk["total_entries"], disk["counts"]["files"], disk["counts"]["dirs"], disk["counts"]["links"]))
|
||||
return 0
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
sys.exit(main())
|
||||
Reference in new issue
Block a user