personal memory agent
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

stop baking _SOLSTONE_JOURNAL_OVERRIDE into generated service files

sol service install unconditionally set the journal override to the
resolved path, which caused path mismatches when the project journal/
is a symlink — the supervisor and its child processes would see different
path strings for the same directory, breaking singleton lock detection
and allowing duplicate supervisor instances.

The override is only needed for dev/test sandboxes. The default
project-root resolution works correctly for production service files.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

+8 -5
+8 -5
think/service.py
··· 66 66 def _collect_env() -> dict[str, str]: 67 67 """Collect environment variables for the service file. 68 68 69 - Captures: HOME, PATH (with venv bin), _SOLSTONE_JOURNAL_OVERRIDE, 70 - and any API keys present in the current environment. 69 + Captures: HOME, PATH (with venv bin), and any API keys present in the 70 + current environment. The journal override is only included if explicitly 71 + set — the default project-root resolution works without it. 71 72 """ 72 - journal_path = str(Path(get_journal()).resolve()) 73 73 venv_bin = str(Path(sys.executable).parent) 74 74 75 75 env = { 76 76 "HOME": str(Path.home()), 77 77 "PATH": f"{venv_bin}:/usr/local/bin:/usr/bin:/bin", 78 - "_SOLSTONE_JOURNAL_OVERRIDE": journal_path, 79 78 } 79 + 80 + override = os.environ.get("_SOLSTONE_JOURNAL_OVERRIDE") 81 + if override: 82 + env["_SOLSTONE_JOURNAL_OVERRIDE"] = override 80 83 81 84 missing_keys = [] 82 85 for key in _API_KEYS: ··· 97 100 98 101 def _generate_plist(env: dict[str, str]) -> bytes: 99 102 """Generate a launchd plist for the solstone supervisor.""" 100 - journal_path = env["_SOLSTONE_JOURNAL_OVERRIDE"] 103 + journal_path = str(Path(get_journal()).resolve()) 101 104 sol = _sol_bin() 102 105 103 106 plist = {