import os, sys scripts_dir = '/home/hmo/.hermes/profiles/position-analyst/scripts' fixed, skipped, errors = 0, 0, [] for name in os.listdir(scripts_dir): p = os.path.join(scripts_dir, name) if not os.path.islink(p): skipped += 1 continue target = os.path.realpath(p) if not os.path.exists(target): errors.append(f"{name}: broken symlink -> {target}") continue try: os.unlink(p) os.link(target, p) # hardlink: same inode, .resolve() stays in scripts_dir fixed += 1 except Exception as e: errors.append(f"{name}: {e}") print(f"fixed: {fixed}, skipped (non-symlink): {skipped}, errors: {len(errors)}") for e in errors: print(' ', e) # verify with the scheduler's own check from pathlib import Path scripts_resolved = Path(scripts_dir).resolve() test = (Path(scripts_dir) / 'meta_growth.py').resolve() try: test.relative_to(scripts_resolved) print('VERIFY OK: meta_growth.py now passes relative_to check') except ValueError: print('VERIFY FAIL: still resolves outside')