Files
hermes-agent/tests/hermes_cli/test_doctor_cache_hogs.py
teknium1 7fe77f29a7 fix(scratch): reap orphan processes and worktree registrations on prune; cache/terminal on the same 24h-idle rule
Deleting an idle scratch entry left two things behind. Headless browsers
started by a lane's e2e run kept running for days with a "(deleted)" cwd
(about 20 on one host; the process registry never knew them because they
were grandchildren of a shell that had exited). Repos whose linked
worktree lived in the entry kept a dangling registration until someone
ran `git worktree prune` by hand (10 in one repo).

The prune now lives in hermes_constants_scratch (hermes_constants keeps the
entry point). Before an idle entry is removed, same-user processes whose
cwd is inside it, or inside any scratch path that no longer exists, are
TERMed then KILLed; the deleted-cwd sweep runs on every pass so orphans
from earlier deletions are caught too. `.git` files found in the entry
name their repo, which gets `git worktree prune` after the rmtree.

cache/terminal used its own 72h fixed-age sweep; it now shares the 24h
idle rule and the subtree check. `hermes doctor` warns about cache-root
directories over 1 GiB that neither pruner covers, since finished campaign
trees parked there sat for weeks (95 GB on one host). System-prompt
scratch line updated to match.
2026-09-21 18:37:21 -07:00

17 lines
716 B
Python

"""``hermes doctor`` names cache-root dirs that no pruner covers once they are big enough."""
from hermes_cli.doctor_state import unpruned_cache_hogs
def test_unpruned_cache_hogs_skips_pruned_dirs_and_small_entries(tmp_path):
cache = tmp_path / "cache"
for name in ("scratch", "terminal", "campaign-x", "web"):
(cache / name).mkdir(parents=True)
with open(cache / name / "blob", "wb") as fh:
fh.truncate(2048)
fh.write(b"x" * 2048)
hogs = unpruned_cache_hogs(tmp_path, min_bytes=1024)
assert {name for name, _ in hogs} == {"campaign-x", "web"}
assert not unpruned_cache_hogs(tmp_path, min_bytes=1 << 20)
assert all(size >= 2048 for _, size in hogs)