sol: daily sol-profile triage manifest 2026-10-31 (9634 entries, 8360 files, 1265 dirs, 9 symlinks; CHECK OK)

This commit is contained in:
ledger committed 2026-10-31 18:54:19 +00:00
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())